home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / aminet / misc / sci / dproc126.lha / docs / DataProc.doc next >
Text File  |  1993-02-28  |  114KB  |  2,835 lines

  1. 1 dataproc
  2. ?
  3.  DataProc is a command-driven data processing program, which works much
  4.  like a tabular calculation program. DataProc reads in a command file
  5.  holding commands and data and can produce a number of different output
  6.  files for further processing with other software. DataProc is especially
  7.  designed to work with GNUPLOT and LaTeX. Both of the latter are available
  8.  as public domain software on almost any computer system.
  9.  
  10.  Beyond the standard mathematics to apply on data several statistic specials
  11.  like regression and averaging are implemented.
  12.  
  13.  You should pass a filename to DataProc. This file wil be read and executed
  14.  by DataProc. The default extension for this file is '.tst'. So DataProc
  15.  tries to open <filename.tst> if <filename> is not available. E.g.:
  16.  
  17.             DataProc project.tst
  18.             DataProc project
  19.  
  20.  are equivalent, unless a file named 'project' exists, which will then be
  21.  read by the second line. If the file 'project.tst' does not exist an error
  22.  will be issued.
  23.  
  24.  If you don't pass a commandfilename, DataProc will enter the interactive
  25.  mode. Anything you enter behind the prompt will be executed just like
  26.  a commandfile line. As comments don't seem to make sense in interactive
  27.  mode, any comments will be interpreted as include file names. See
  28.  `commands include` for more information. An example session might be:
  29.  
  30.             TeX:physics> DataProc
  31.             DataProc 1.221 (24.1.93)
  32.             © 1992 by MGR, Asgard
  33.             This Amiga copy is registered to Lars Hanke #: 000012
  34.  
  35.             1 > *project1
  36.           [messages from execution of project1.tst]
  37.             2 > *project2
  38.           [messages from execution of project2.tst]
  39.             3 > #quit
  40.  
  41.             TeX:physics>
  42.  
  43. 2 politics
  44. ?poltics
  45.  
  46.  Some words about software in general. Never use original files to run
  47.  software. Always create copies and run them, because you will never
  48.  know what might happen to the software.
  49.  
  50.  If you have problems getting started with the evaluation copy, contact
  51.  me immediately, no matter if you want this program or not. I cannot
  52.  test the software on a lot of systems with different configurations
  53.  and it may do really weired things on other systems. If I do not come
  54.  to know it, this won't change ever and at most leads to a bad reputation
  55.  of the program.
  56.  
  57. 3 distribution
  58. ?distribution
  59.  
  60.  In a nutshell, DataProc may be distributed freely as long as
  61.  the following restrictions are met:
  62.  
  63.  The distributor may only charge a fee up to the costs of
  64.  obtaining a public domain diskette from Fred Fish. The
  65.  distributor agrees to cease distributing the programs and data
  66.  involved if requested to do so by the author. The distributor
  67.  may only distribute an unmodified copy of the original program,
  68.  with all the supplied documentation and copyright notices
  69.  intact.
  70.  
  71.  For more details, see the section called `License`.
  72.  
  73. 3 support
  74. ?support
  75.  
  76.  If you have any suggestions, bug reports etc., feel free to
  77.  contact the author of DataProc at the address given in the
  78.  section "Registration". Additionally, you can reach me at:
  79.  
  80.           Lars Hanke
  81.           FIDO:   2:245/5802.22
  82.           UUCP:   mgr@asgard.bo.open.de
  83.  
  84. 3 license
  85. ?license
  86.  
  87.  1. This license applies to the product called "DataProc", a
  88.  program available for the Amiga computer and MS-DOS (tm) machines,
  89.  published by Lars Hanke under the concepts of ShareWare, and
  90.  the accompanying documentation, example files and anything else
  91.  that comes with the original distribution. The terms "Programs"
  92.  and "DataProc" below, refer to this product. The license is
  93.  addressed as "you".
  94.  
  95.  2. You may copy and distribute verbatim copies of the
  96.  programs' executable code and documentation as you receive it,
  97.  in any medium, provided that you conspicuously and appropriately
  98.  publish only the original, unmodified programs, with all
  99.  copyright notices and disclaimers of warranty intact and
  100.  including all the accompanying documentation, example files and
  101.  anything else that came with the original.
  102.  
  103.  3. You may not copy and/or distribute these programs without
  104.  the accompanying documentation and other additional files that
  105.  came with the original. You may not copy and/or distribute
  106.  modified versions of these programs.
  107.  
  108.  4. You may not copy, modify, sublicense, distribute or
  109.  transfer the programs except as expressly provided under this
  110.  license. Any attempt otherwise to copy, modify, sublicense,
  111.  distribute or transfer the programs is void, and will
  112.  automatically terminate your rights to use the programs under
  113.  this license.
  114.  
  115.  5. By copying, distributing and/or using the programs you
  116.  indicate your acceptance of this license to do so, and all its
  117.  terms and conditions.
  118.  
  119.  6. Each time you redistribute the programs, the recipient
  120.  automatically receives a license from the original licensor to
  121.  copy, distribute and/or use the programs subject to these terms
  122.  and conditions.  You may not impose any further restrictions on
  123.  the recipients' exercise of the rights granted herein.
  124.  
  125.  7. You may not disassemble, decompile, re-source or otherwise
  126.  reverse engineer the programs.
  127.  
  128.  8. You may use the programs for a period of up to 40 days for
  129.  evaluation.  After that, you have to register.
  130.  
  131.  9. If you wish to incorporate parts of the programs into other
  132.  programs, write to the author to ask for permission.
  133.  
  134.  10. You agree to cease distributing the programs and data
  135.  involved if requested to do so by the author.
  136.  
  137.  11. You may charge a fee to recover distribution costs. The
  138.  fee for diskette distribution may not be more than the cost to
  139.  obtain a public domain diskette from Fred Fish.
  140.  
  141. 3 warranty
  142. ?warranty
  143.  
  144.  THERE IS NO WARRANTY FOR THE PROGRAMS, TO THE EXTENT PERMITTED
  145.  BY APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE
  146.  COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAMS "AS
  147.  IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
  148.  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  149.  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE
  150.  ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAMS IS
  151.  WITH YOU.  SHOULD THE PROGRAMS PROVE DEFECTIVE, YOU ASSUME THE
  152.  COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
  153.  
  154.  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
  155.  WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
  156.  REDISTRIBUTE THE PROGRAMS AS PERMITTED ABOVE, BE LIABLE TO YOU
  157.  FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
  158.  CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
  159.  THE PROGRAMS (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
  160.  BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
  161.  PARTIES OR A FAILURE OF THE PROGRAMS TO OPERATE WITH ANY OTHER
  162.  PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED
  163.  OF THE POSSIBILITY OF SUCH DAMAGES.
  164.  
  165. 3 disclaimer
  166. ?disclaimer
  167.  
  168.  No warranty, either express or implied, is made with respect
  169.  to the fitness or merchantability of DataProc.
  170.  
  171.  Lars Hanke (referred to as "the author"), reserves the right to not
  172.  develop any future versions of DataProc.
  173.  
  174.  The author will try to make a good faith attempt at
  175.  correcting any problems if any are discovered, but is in no way
  176.  required, nor bound to correct them.
  177.  
  178.  The author neither assumes nor accepts any responsibility for
  179.  the use or misuse of these programs. He also will not be held
  180.  liable for damages or any compensation beyond the original
  181.  registration fee due to loss of profit or any other damages
  182.  arising out of the use, or inability to use these programs.
  183.  
  184.  Lars Hanke will not be liable for any damage arising from the failure
  185.  of these programs to perform as described, or any destruction of other
  186.  programs or data residing on a system attempting to run the programs.
  187.  This does not depend on my knowledge of damaging errors in the programs.
  188.  
  189.  I may change prices and distribution conditions at will, with every new
  190.  revision of the programs. I cannot be forced to distribute old revisions.
  191.  Registrations not meeting the current conditions will lead me to inform
  192.  you of the changes. You may then cancel your registration or meet the
  193.  new conditions. Note that you have to express any interest in special
  194.  distribution conditions explicitly, or I will assume that you agree with
  195.  the current conditions. Lars Hanke is not liable for any costs of monetary
  196.  transfers and other expenses concerning a cancelled registration.
  197.  
  198. 3 registration
  199. ?registration
  200. ?shareware
  201.  As already mentioned, this program is Shareware. Shareware is neither
  202.  Public Domain, nor Freeware, nor Giftware, nor Copyleft. If you decide
  203.  to use this program, you must pay for it! If you don't pay, but use, this
  204.  is software piracy, with all its legal consequences.
  205.  
  206.  Some reasons to register: First of all, to stay legal, but as nobody cares
  207.  nowadays, there are some other good reasons. An important reason is the
  208.  support of the shareware idea. You don't buy shareware blindly, but you
  209.  may test it thoroughly before. But if nobody pays, it is only a logical
  210.  consequence that no-one will write shareware anymore and finally you have
  211.  no chance, but buying software blindly. Finally the support of Shareware
  212.  programmers will encourage them to care for their programs and you are
  213.  more likely to get the same support as with commercial software.
  214.  
  215.  Unfortunately, experience tells us that those reasons aren't too convincing
  216.  for a lot of users. Well, here are some reasons to register DataProc.
  217.  First of all, the banner message will change from "unregistered" to your
  218.  name and registration number. Then you will be able to install DataProc
  219.  anywhere in your path, the evaluation copy may only be started form its
  220.  own location directory. Finally those nerve-racking Shareware posters
  221.  with its requests for keyboard input during the execution of your commandfile
  222.  will disappear. The evaluation copy of DataProc is fully operative, but
  223.  has limitations to the possibilities of automatic execution e.g. during
  224.  batch jobs and to a proper installation in your system, e.g. paths or
  225.  packing of the program. Due to a loss of dumb checks whether the copy may
  226.  be used or not, the registered software improves a great deal in performance,
  227.  especially the reloading of the own code in bytes will drop.
  228.  
  229.  Remember, a software worth using is a software worth buying. And don't tell
  230.  me you can't afford DM 25.--, you could still sell your computer! This
  231.  price is for registration only. The keyfile will be sent via UseNet. If
  232.  you don't want your keyfile via UseNet or would like an update included
  233.  add DM 2.-- for European Union countries or DM 5.-- for countries outside
  234.  the EU, and I will send a disk including your keyfile and the most recent
  235.  DataProc version. Note: If the service "keyfile via email" becomes too
  236.  excessive, I may quit that service at will, either mine or the will of
  237.  my mailservers.
  238.  
  239.  Send your registration (including: Name and address, DataProc version,
  240.  source you got DataProc from, your system configuration and your EMAIL
  241.  address) to:
  242.  
  243.          MGR, Asgard
  244.          Lars Hanke
  245.          Schlachthofstr. 67
  246.          D-4690 Herne 2
  247.  
  248.          FIDO: 2:245/5802.22
  249.          UUCP: mgr@asgard.bo.open.de
  250.  
  251.  This is also the adress to send suggestions and bug reports to. For urgent
  252.  bug reports try:
  253.  
  254.                bugs@asgard.bo.open.de
  255.  
  256.  If you intend to install this programm on a multi user system, or are
  257.  interested in ports to other machines or want to customize it, send me a
  258.  note. I will gladly cooperate.
  259.  
  260. 3 credits
  261. ?credits
  262.  Thanks to the developers of GNU-Plot and TeX. The existance of those
  263.  products was the main influence to start this project. Also the basic
  264.  layout of the user interface was drawn from there. This does of course
  265.  in no way apply to any code used for DataProc.
  266.  
  267.  Thanks to TrapLand, showing me that SHAREWARE might work even in Europe.
  268.  I hope you don't mind that I took your legal stuff as the basis of the
  269.  DataProc license.
  270.  
  271.  Thanks to Mr. Teulings, Mr. Preuß for beta testing and Mr. Kulka for
  272.  alpha testing. Thanks as well to Mr. Böllmann and Mr. Beisemann for
  273.  lending me their machines for the MS-DOS compilation.
  274.  
  275.  Thanks to Mr. Teulings for "WRITE" coping with those goddamned space
  276.  syntax in the .doc file.
  277.  
  278.  Thanks to all those helpful guys round FIDO and UseNet, helping me
  279.  with coding and porting problems.
  280.  
  281.  Thanks to Commodore for producing the Amiga and to SAS for their
  282.  prompt help and support of their compiler.
  283.  
  284.  Finally thanks to me for not needing any sleep at all and to my dog
  285.  for generously freeing me of that task, sleeping for both of us.
  286.  
  287.  Thanks to Odin, the Aesir and the Runes for my name and logo.
  288.  
  289. 2 basics
  290. 3 syntax
  291. ?commandfile
  292. ?commandline
  293. ?comment
  294. ?grouping
  295. ?seperator
  296. ?token
  297. ?syntax
  298.  There are some basic rules about the structure of command files. In general
  299.  empty lines and the number of spaces are ignored. The same is with leading
  300.  and trailing spaces, tabs or whatsoever. DataProc does not distinguish
  301.  between different spacing characters.
  302.  
  303.  The characters '*', ';' and '%' mark a commentline, which is ignored. Inline
  304.  comments are not yet supported. Note that in interactive mode the line
  305.  following the comment sign will be passed as arguments to the include
  306.  command. See `commands include` for more information.
  307.  
  308.  The characters '!' and '$' will post whatever they are followed in that line
  309.  on screen during the execution of the commandfile. They should be used to
  310.  supervise proper operation of a commandfile.
  311.  
  312.  A commandline is made up by ASCII characters and ends with the EOL character
  313.  (usu. $0a). By now you cannot mark a line as a follower.
  314.  
  315.  Commandlines are made up by tokens. Each token is seperated by either a space
  316.  or ':', '/' or '&'. While '//' declares an empty token two spaces do not.
  317.  (See above). Since Version 1.108 system tokens aren't case sensitive anymore.
  318.  Strings you define yourself of course won't be translated to a special case.
  319.  
  320.  Tokens may hold seperators, if they are enclosed in grouping characters.
  321.  These grouping character pairs are: () or [] or '' or "". The grouping
  322.  pairs may not nest. If an opener (bra) is encountered, the input line will
  323.  be copied to the token until the corresponding close character (ket) is
  324.  found.
  325.  
  326.  Commandlines hold either a command or data. The line is interpreted as a
  327.  command, if it begins with a sharp sign '#'. In any other case DataProc
  328.  expects data to be there.
  329.  
  330. 3 organization
  331. ?table
  332. ?column
  333. ?internals
  334.  Internally DataProc works much like a spread sheet program. It inits a table
  335.  of a user defined length and can add an arbitrary number of columns to it.
  336.  Commands usually affect a whole column. As you might guess the column is the
  337.  basic unit in DataProc. That is the major difference to a tabular calculator
  338.  where the cell serves as its unit.
  339.  
  340.  Each column has one physical and two logical numbers. The physical is the
  341.  basic reference. It is simply the number of the column as it was declared
  342.  by the `columns` command.
  343.  
  344.  Beyond that each column may be assigned a specific read column and a write
  345.  column, meaning the order data is read into them or written from them. For
  346.  more information see `using` and `ocol`.
  347.  
  348. 3 mathematics
  349. ?function
  350. ?mathematic
  351.  DataProc supplies a scientific calculator. You may define your own constants,
  352.  variables and functions. Read the following for its syntax:
  353.  
  354.    ATOM        - Atoms are plain Values like 7.65e-12 and constants like PH
  355.                  Functions are treated as atoms as well, but the arguments
  356.                  are itself Expressions
  357.  
  358.    OPERATOR    - The currently supported operators are + - * / ^ with the
  359.                  commonly known meaning. Missing operators like in 3sin(x)
  360.                  or 3 4 are treated as '*' so that the former expressions
  361.                  would be expanded to 3*sin(x) and 3*4. Operators obey the
  362.                  common priority rules.
  363.  
  364.    BRACES      - grouping characters. You may set Expressions into pairs of
  365.                  corresponding braces. All types are treated equally, but
  366.                  must of course match. The brace pairs are: [] {} ()
  367.                  Thus (3*[4+5]-2)/6 would work but (3*[4+5)-2]/6 would not!
  368.  
  369.    EXPRESSION  - any valid combination of Atoms, Operators and Braces.
  370.                  ATOM OPERATOR ATOM
  371.                  EXPRESSION OPERATOR EXPRESSION
  372.                  ATOM ATOM                      => OPERATOR = '*'
  373.                  EXPRESSION EXPRESSION          (dto.)
  374.                  ([{ EXPRESSION }])             => treated as ATOM in this
  375.                                                    level
  376.    NAME        - Names start with an alphabetic character and may be followed
  377.                  by any combination of alphanumeric characters. The total
  378.                  length must not exceed 29 characters. Names are not case
  379.                  sensitive.
  380.  
  381.    VARIABLE    - NAME followed by OPERATOR or end of line
  382.  
  383.    FUNCTION    - NAME followed by an opening brace. In defines this must be
  384.                  an opening parenthesis '('. Note that a defined VARIABLE
  385.                  in the combination VARIABLE(... will be correctly interpreted
  386.                  as VARIABLE*(... and a defined FUNCTION in the combination
  387.                  FUNCTION EXPRESSION will lead to the message --> Argument
  388.                  expected. Note also that spaces are ignored, except for
  389.                  separation numbers, so that 3 4 is interpreted as 3*4 and
  390.                  34 is interpreted as 34.
  391.  
  392.    DEFINE      - ":=" defines or redefines a variable or function. When
  393.                  defining a function the next character must be '(' (spaces
  394.                  are ignored)
  395.                  VARIABLE:=EXPRESSION                 => define a symbolic
  396.                                                          variable
  397.                  FUNCTION(VARIABLE,...):=EXPRESSION   => define a new function
  398.  
  399.                  Note that the template arguments are not stored to the
  400.                  variable list. If identical entries exist in the variable
  401.                  list they will not be recognized -- the template has higher
  402.                  priority. Note as well that global variables are evaluated
  403.                  immediately, so later changes won't affect the function.
  404.  
  405.    COMMENTS    - The line is terminated by any nonprintable character or a
  406.                  semicolon <;>. The rest can be used for comments.
  407.  
  408.    RESERVED    - In future versions the following symbols may come to a
  409.                  meaning, so do not put your own stuff on them! The charcters
  410.                  are: ! _ _i _[]
  411.  
  412.  
  413.  `SYMBOLS`
  414.  
  415.  The following symbols are predefined:
  416.  
  417.    PI          - you now that number (3.14...), don't you?
  418.    ME          - the Euler number                  (2.718...)
  419.    RT2         - the square root of 2              (1.41...)
  420.    PH          - Planck's quantum                  (6.626...e-34)
  421.    PHB         - Planck's quantum divided by 2*PI
  422.    PE0         - electrical field constant SI      (8.854...e-12)
  423.    PU0         - magnetical filed constant SI      (1.256...e-6)
  424.    PC          - light speed in m/s                (2.997...e8)
  425.    PK          - Boltmann constant                 (1.380...e-23)
  426.    PR          - general gas constant              (8.31441)
  427.    PSIGMA      - Stefan-Boltzmann constant         (5.670...e-8)
  428.    PE          - charge of electron in C           (1.602...e-19)
  429.    PME         - mass of electron in kg            (9.109...e-31)
  430.    PBM         - Bohr's magneton in Am^2           (9.274...e-24)
  431.    PMP         - mass of proton
  432.    PMN         - mass of neutron
  433.    PF          - gravity constant                  (6.672...e-11)
  434.    PG          - standard earth acceleration       (-9.80665)
  435.    PKEL0       - absulute zero temperature         (-273.15)
  436.    PPN         - normal pressure in Pa             (101325)
  437.    PVM0        - ideal gas molaric volume in l     (22.41...)
  438.    PNA         - particles per mol                 (6.022...e23)
  439.    PFARAD      - Faraday constant                  (9.648...e4)
  440.    PRH         - Rydberg constant                  (1.097...e7)
  441.    PLC         - Compton wavelength                (2.426...e-12)
  442.    PSOLAR      - solar constant                    (1.368e6)
  443.  
  444.    N2KP        - newton to kilopond                (0.102)
  445.    MS2KMH      - m/s to km/h                       (3.6)
  446.    J2MEV       - Joule to MeV                      (6.241e12)
  447.    TORR2P      - Torr to Pascal                    (133)
  448.    U2KG        - u (nuclear mass unit) to kg       (1.660...e-27)
  449.    KG2MEV      - kg to equivalent energy in MeV    (5.609...e29)
  450.    U2MEV       - u to MeV                          (931.433...)
  451.    LY2M        - light years to meters             (9.465...e15)
  452.    AE2M        - astronomic units to meters        (1.495...e11)
  453.    PARSEC      - Parsec to meters                  (3.085...e16)
  454.    IN2CM       - inches to centimeters             (2.54)
  455.    FT2CM       - feet to centimeters               (30.48)
  456.    YD2CM       - yards to centimeters              (91.44)
  457.    MILE2KM     - miles to kilometers               (1.609)
  458.    PS2KW       - german horsepowers to kilowatts   (0.736)
  459.    CAL2J       - calories to Joule                 (4.1868)
  460.  
  461.    EXA         - scaling syllable                  (1e18)
  462.    PETA        -                                   (1e15)
  463.    TERA        -                                   (1e12)
  464.    GIGA        -                                   (1e9)
  465.    MEGA        -                                   (1e6)
  466.    KILO        -                                   (1e3)
  467.    HEKTO       -                                   (1e2)
  468.    DECA        -                                   (10)
  469.    DECI        -                                   (0.1)
  470.    CENTI       -                                   (1e-2)
  471.    MILLI       -                                   (1e-3)
  472.    MICRO       -                                   (1e-6)
  473.    NANO        -                                   (1e-9)
  474.    PICO        -                                   (1e-12)
  475.    FEMTO       -                                   (1e-15)
  476.    ATTO        -                                   (1e-18)
  477.  
  478.  Arguments of trigonometric functions are expected in radian!
  479.  
  480.    SIN(x)      - sine function                     sin(x)
  481.    COS(x)      - cosine function                   cos(x)
  482.    TAN(x)      - tangent function                  tan(x)
  483.    COT(x)      - cotangent function                cot(x)
  484.    SEC(x)      - secant function (1/sin)           sec(x)
  485.  
  486.    ASIN(x)     - arcus sine function               arc sin(x)
  487.    ACOS(x)     - arcus cosine function             arc cos(x)
  488.    ATAN(x)     - arcus tangent function            arc tan(x)
  489.    ACOT(x)     - arcus cotangent function          arc cot(x)
  490.    ASEC(x)     - arcus secant function             arc sec(x)
  491.  
  492.    SINH(x)     - hyperbolic sine                   sinh(x)
  493.    COSH(x)     - hyperbolic cosine                 cosh(x)
  494.    TANH(x)     - hyperbolic tangent                tanh(x)
  495.  
  496.    ASINH(x)    - area hyperbolic sine              ar sinh(x)
  497.    ACOSH(x)    - area hyperbolic cosine            ar cosh(x)
  498.    ATANH(x)    - area hyperbolic tangent           ar tanh(x)
  499.  
  500.    SQR(x)      - square of x -- faster than x^2    x^2
  501.    SQRT(x)     - square root                       x^(.5)
  502.    ROOT(y,x)   - yth root of x                     x^(1/y)
  503.  
  504.    LN(x)       - natural logarithm                 ln(x)
  505.    LG(x)       - decadic logarithm                 log10(x)
  506.    LOG(y,x)    - logarithm based y                 log_y(x)
  507.    EXP(x)      - xth power of Euler constant       e^x
  508.  
  509.    FAC(x)      - faculty of int(x)                 x!
  510.  
  511.    RAD(x)      - convert degree argument to radians
  512.    DEG(x)      - convert radian argument to degrees
  513.  
  514.    ABS(x)      - absolute value                    |x|
  515.    SGN(x)      - signum function                   sgn(x)
  516.  
  517.    MAX(x,y)    - returns the greater of x and y
  518.    MIN(x,y)    - returns the smaller of x and y
  519.  
  520.  Concluding Notes: Unlike most math programs the operator '/' is interpretd
  521.  as a fraction bar, so everything behind it is interpreted as the denomiator
  522.  unless an addition operator '+' or '-' is encountered. E.g.:
  523.  
  524.    40/4*5   results in 2
  525.    15/45/9  results in 3
  526.    6/3+2    results in 4 (!)
  527.  
  528.  There is a conceptional bug in the handling of the '-' operator. Do not
  529.  chain them. Instead write: EXPRESSION - (EXPRESSION + EXPRESSION). Also
  530.  the monadic '-' does not always work the way it should. (-ATOM) usually
  531.  does.
  532.  
  533.  I won't fix the bugs in the math module, but I am going to completely
  534.  rewrite it, because the concept cannot hold sums, integrals, etc. The
  535.  new module will support integration and symbolic differentiation as
  536.  well.
  537.  
  538. 2 commands
  539. 3 general
  540. ?command
  541.  The command is the first `token` in a `commandline`. Commands always start
  542.  with a leading sharp sign '#'. Commands aren't case sensitive anymore.There
  543.  must not be any space between the sharp and the command.
  544.  
  545.  As most commands affect one specific column there is a syntax that is
  546.  common to most commands:
  547.  
  548.       #command col arg1 ...
  549.  
  550.  where command is the command name and col is the physical 'column' to affect.
  551.  However, there are some commands that do not affect a specific column or more
  552.  than one, so col represents zero or more `tokens` in the general syntax. The
  553.  same is with the arguments.
  554.  
  555.  Any `commandfile` must contain the commands `dsize` and `columns`. So read
  556.  the sections concerning those commands carefully.
  557.  
  558. 3 variables
  559. ?variables
  560. ?global
  561. ?enviroment
  562.  There are three types of variables maintained by the program that aren't
  563.  related in any way, may not be mixed up and cannot be processed together
  564.  in any way. Except for the fourth variable that may be build from two
  565.  of the latter.
  566.  
  567.  The most important are the math processor's variables. Beyond what was said
  568.  in the math processor section, you may use them as data to write to columns
  569.  and `post` them on screen, by means of the equally named command. Specifying
  570.  "$=" in a `data` field makes a maths variable available to the data stream.
  571.  See the `data` section for more information about that. Math variables are
  572.  not cleared by the `reset` command.
  573.  
  574.  Global variables -- it's just a name, math variables are of course global as
  575.  well -- are used to make the `commandfile` handier and more readable. Global
  576.  variables may replace any number `token` of any command, no care if it is
  577.  a column number, function number, row boundary or whatever. It will be much
  578.  easier to reference columns and functions by name than to keep track of
  579.  hundreds of abstract numbers. The `mark` command even frees you of the task
  580.  to count data rows for your boundaries. See `define`, `queue`, `mark` and
  581.  `undefine` for more information about global variables. Global variables
  582.  are cleared by the `reset` command.
  583.  
  584.  Terminal enviroment variables are local variables, meaning that their value
  585.  is set per terminal. Two different terminals may carry different values in
  586.  equally name variables. On the other hand they are not cleared by the
  587.  `reset` command. They are used to provide the terminal with additional
  588.  information of how to produce their output. See `set`, `unset` and the
  589.  `terminal` section for more information about enviroment variables.
  590.  
  591.  Since 1.159 `global strings` are supported. They are useful for two purposes.
  592.  First of all you can use computation results in `terminal enviroment`
  593.  variables, e.g. to add a fit curve to your data plot in the `GNUPLOT`
  594.  terminal. Secondary you can produce a better formatted output on
  595.  runtime.
  596.  
  597. 3 addcol
  598. ?addcol
  599.  This command adds a new column to an existing table. Normally you should
  600.  use the `columns` command for that task, but `addcol` might produce more
  601.  readable code or in some cases may cope with memory problems.
  602.  
  603.  `addcol` must be followed by a number token, which is the physical column
  604.  number to generate. You may pass a name there and it will be assigned the
  605.  highest column number as a global variable. This is basically the way you
  606.  should use this function.
  607.  
  608.  The second token must be a format identifier as specified in the `columns`
  609.  command.
  610.  
  611.  Example:
  612.  
  613.        #addcol LastCol %f
  614.        #row 0
  615.        #using LastCol
  616.        #include "MyData.tst"
  617.  
  618.  This add a column behind all existing columns, reset the row counter and
  619.  read new data from "MyData.tst" to that column. LastCol would hold the
  620.  number of the new column.
  621.  
  622.  See also `columns` and `remcol`.
  623.  
  624. 3 applog
  625. ?applog
  626.  This command opens a file to store some scratch that you would usually
  627.  write on some sheet for further evaluation during the formulation of
  628.  your data analysis. If the file given with the first token already exists,
  629.  new lines will be appended to it.
  630.  
  631.  See also `newlog`, `logline` and `logpost`.
  632.  
  633. 3 areg
  634. ?areg
  635.  This is the most complex command implemented by now and it will hopefully
  636.  stay forever. `areg` enables you to do a least square approximation to any
  637.  function you like as long as you don't wish to optimize other than two
  638.  parameters. Note that for standard situations e.g. linear or logarithmic
  639.  regressions special commands are implemented so that you won't need this
  640.  command too often. See `lreg` and `logreg` for more information about
  641.  that.
  642.  
  643.  The syntax is long but logical. The `tokens` are in sequence: x-column,
  644.  y-column, function to match, partial derivation of the function according
  645.  to the first parameter (a), partial derivation of the function according
  646.  to the second parameter (b), estimation for a and estimation for b. While
  647.  all of the latter tokens oblige the following may be omitted: iteration
  648.  depth, start row and finally end row.
  649.  
  650.  The columns are indicated by their physical column number. The functions
  651.  are indicated by their number as assigned by the `func` command. For both
  652.  groups of numbers as well as for the start and end row, you may of course
  653.  use global variables. The functions are expected to take the parameters:
  654.  
  655.          y=f(a,b,x)
  656.  
  657.  in exactly that sequence. Take care that you only pass 3 parametred functions
  658.  matching the above convention.
  659.  
  660.  The token contents for the estimation values are passed to the maths
  661.  processor, so you may use its math variables or even mathematical expressions
  662.  for the estimation values. Note that `areg` is usually rapidly convergent,
  663.  but false estimations my even crash the iteration.
  664.  
  665.  If you pass zero to iteration depth or you omitted that token, `areg` will
  666.  work interactively. Thus it will stop after every iteration and show where
  667.  you are. If you're satisfied with the result, you leave the iteration
  668.  pressing the 'Q' key. Any other key will compute the next step.
  669.  
  670.  Finally you may specify the first and last row of data to include in the
  671.  regression. Row numbers start with 1 and both rows given as boundaries
  672.  will be included. If you specify zero or leave the token empty the maximum
  673.  value will be set, meaning the first row as start or the last row as end.
  674.  
  675.  The regression results are printed on screen during execution of the
  676.  `commandfile` and are stored to the math variables DPA holding the first
  677.  parameter result, DPB the second and DPSA and DPSB the corresponding
  678.  absolute errors.
  679.  
  680.  See also `lreg`, `logreg` and `func`.
  681.  
  682. 3 ask
  683. ?ask
  684.  Works just like `if` but the condition is given online by the user. The
  685.  rest of the line is promted to the screen and the user is asked to
  686.  enter 'Y' or 'J' for a true condition or 'N' for a false condition. The
  687.  command must further be handeled by `else` and `endif`.
  688.  
  689.  Note that setting a batch level higher or equal to 10 will always answer
  690.  this command with 'N'.
  691.  
  692.  Example:
  693.  
  694.        #ask Shall I do it?
  695.        ! I did it!
  696.        #else
  697.        ! why not?
  698.        #endif
  699.  
  700.  will print on screen "Shall I do it? (Y/J,N) > " If you type 'N', it will
  701.  post "why not?" or if you type 'Y' or 'J', it will post "I did it!"
  702.  
  703.  See also `if`, `else`, `endif`, `readvar`, `stop` and `batch`.
  704.  
  705.  
  706. 3 average
  707. ?average
  708.  Followed by the `column` to average, an optional weight column that may be
  709.  left empty and the start and ending row, which as well may be left empty or
  710.  set zero.
  711.  
  712.  If a weight is specified DataProc computes the average to the weight given
  713.  in the designated column.
  714.  
  715.  If the startrow `token` is empty or zero the first row is defaulted. The
  716.  analogon is an empty or zero `token` for endrow that is interpreted as the
  717.  last row currently read.
  718.  
  719.  The results of the average computation is posted on screen during the
  720.  execution of the `commandfile`. The results are also stored to global
  721.  variables that may be accessed by the maths processor. DPMX holds the
  722.  computed mean and DPSMX its absolute error. DPMSX holds the average
  723.  absolute error (standard deviation). Those can be further processed using
  724.  `math`, `post` and `generate`.
  725.  
  726.  Example:
  727.  
  728.          #average 3
  729.          ! The average peripherial length is
  730.          #post dpmx*pi
  731.  
  732.  computes the unweighted average of all entries in column 3. If we assume
  733.  that column 3 holds the results of several attempts to measure the diameter
  734.  of a circle, it finally posts the average length of the peripherial on
  735.  screen.
  736.  
  737.  See also `mean`, `math`, `generate`, `post` and `lreg`.
  738.  
  739. 3 batch
  740. ?batch
  741.  This command sets a so called batch level. The next token must be a
  742.  number token, which is set as batch level. Default is batchlevel 0.
  743.  Any nonzero level will ignore all `stop` commands. A level higher
  744.  or equal to 10 will answer any `ask` command with 'N'.
  745.  
  746.  See also `ask` and `stop`.
  747.  
  748. 3 build
  749. ?build
  750.  This command is used to assemble `global string` variables. It acts much
  751.  like typical print commands in many programming languages. The arguments
  752.  in sequence are: variable name, format string, arguments. Note that the
  753.  argument line is parsed as tokens, thus you will usually have to quote
  754.  the format string or mathematical expressions.
  755.  
  756.  The format string may contain %d (%ld) what believes the corresponding
  757.  argument to be a `global variable`, %f (%lf) is replaced by the result
  758.  of the given mathematical expression, %s what denotes a pure string or
  759.  a `global string` variable and finally %% producing the percent itself.
  760.  %f (%lf) may be followed by a single digit denoting the number of
  761.  significant cyphers just like the `prec` command. The precision defaults
  762.  to 7.
  763.  
  764.  Global strings can be evaluated by `build`, `post`, `preamble` and `set`.
  765.  
  766.  Example:
  767.  
  768.          #build mystr "The mean pressure is: %f +/- %f hPa" DPMX DPSMX
  769.          #post mystr
  770.  
  771.  This makes your script's runtime output a little more readable.
  772.  
  773. 3 closelog
  774. ?closelog
  775.  Closes a note sheet file that has been opened by `newlog` or `applog`.
  776.  Usually you won't need this command, because DataProc closes all files
  777.  when closing down. Anyhow, if you like to print out your logfile during
  778.  execution, you must close it, before another application may open it
  779.  for further processing.
  780.  
  781.  Example:
  782.  
  783.        #applog "mylog.log"
  784.        ; do something
  785.        #closelog
  786.        #dos type mylog.log
  787.  
  788.  Will print out the log file "mylog.log" that had been generated or modified
  789.  in the same commandfile.
  790.  
  791.  See also `closetag`, `newlog` and `applog`.
  792.  
  793. 3 closetag
  794. ?closetag
  795.  Closes a tag database file that has been opened by `tagfile`. Usually you
  796.  won't need this command as DataProc closes all files when closing down.
  797.  Anyhow, if you want other applications to work with it, before your
  798.  commandfile ends, you may make it accessible by this command. See `closelog`
  799.  for a typical application.
  800.  
  801.  See also `tagfile` and `closelog`.
  802.  
  803. 3 columns
  804. ?columns
  805.  The first `token` is expected to hold the number of columns for the table
  806.  to hold. Since version 1.204 this token is optional and may be omitted. If
  807.  you supply a number of columns it will be used. Note that any format
  808.  identifier beyond that mark will be ignored and if you supply less
  809.  identifiers this will cause an error.
  810.  
  811.  The next tokens hold format descriptors for the relating column. They are
  812.  just like the printf() C type format descriptors.
  813.  
  814.       %f    - float number
  815.       %lf   - float number (synonym to %f)
  816.       %d    - integer number
  817.       %s    - character string
  818.  
  819.  The sequence the columns are declared in makes their physical `column`
  820.  number. E.g.:
  821.  
  822.       #columns 3 %d %f %s
  823.  
  824.  would allocate space for three columns and declare the physical column
  825.  number 1 to hold integer numbers, physical column 2 to hold floats and
  826.  physical column 3 to hold strings.
  827.  
  828.  In addition the logical read and write numbers of the columns are inited
  829.  to the physical column number.
  830.  
  831.  See also `dsize` and `reset`.
  832.  
  833. 3 contract
  834. ?contract
  835.  This command is quite similar to `generate`. But unlike `generate` it
  836.  produces a new column by processing entries of the same column. It could
  837.  be used to compute the deltas between to entries, but that is already done
  838.  by `delta`.
  839.  
  840.  The first `token` holds the column to generate. Then the start and end row
  841.  follow. Empty tokens there or zeroes are interpreted as boundary values,
  842.  meaning first or last row. The next `token` holds the stepwidth, meaning
  843.  the distance between two rows to process together. So if you have a `data`
  844.  stream holding the occurences of maxima and minima, a stepwidth of 2 would
  845.  serve to compute the e.g. deltas between maxima and minima without mixing
  846.  them up. The next `token` holds the function number to use for processing.
  847.  The following tokens build a column list, so you can use the information of
  848.  more than one column.
  849.  
  850.  The function arguments are passed in the following manner: Current row of
  851.  the first `column` in the list, current row plus stepwidth of the first
  852.  `column` in the list, current row of the second column in the list and so
  853.  on.
  854.  
  855.  The destination is written to the destination column at current row plus
  856.  stepwidth. The first stepwidth rows in the destination are thusly marked
  857.  void.
  858.  
  859.  The row boundaries refer to the current row. Each row between the first and
  860.  last minus stepwidth may become current row, if you select that range.
  861.  
  862.  Example:
  863.  
  864.          #func 1 f(u1,u2,i1,i2):=(u2-u1)*(i2-i1)
  865.          #contract 5 0 0 2 1 3 4
  866.  
  867.  Writes the product of the differences of odd and even row pairs in columns
  868.  3 and 4 to column 5. As the whole range is selected any possible pair in
  869.  forward sequence will be processed. The first two entries in column 5 will
  870.  be marked void.
  871.  
  872.  See also `func`, `generate` and `delta`.
  873.  
  874. 3 count
  875. ?count
  876.  Fills a column with the current row number. An optional function as defined
  877.  by a `func` command may follow. In the latter case the column will hold the
  878.  results of the given function, which is passed the row number as its
  879.  argument.
  880.  
  881.  Example:
  882.  
  883.          #func 1 f(x):=10x+3
  884.  
  885.          #count 1
  886.          #count 2 1
  887.  
  888.  The first command stores the row number to column 1. The second stores the
  889.  row number multiplied by 10 incremented 3 to column 2.
  890.  
  891.  See also `func`, `make` and `scale`.
  892.  
  893. 3 define
  894. ?define
  895.  Defines a global variable. Global variables may replace `any token` that
  896.  expects numbers. No matter if it be column numbers, function numbers, row
  897.  boundaries, etc. They however aren't related in any way to the math
  898.  processor's variables and thus cannot be used in mathematical contexts.
  899.  
  900.  The syntax is variable name followed by value. Example:
  901.  
  902.          #define MyVar 6
  903.  
  904.  `MyVar` may now replace any number `token` with the value 6. For instance:
  905.  
  906.          #lreg 1 2 3 myvar
  907.  
  908.  would do a linear regression of column 2 to 1 weighted by 3, beginning with
  909.  row myvar -- which we defined to be 6. As you probably guess from that,
  910.  global variables -- being `system tokens` -- are not case sensitive.
  911.  
  912.  See also `undefine`, `queue` and `mark`.
  913.  
  914. 3 delta
  915. ?delta
  916.  Works similar to `contract` with the function f(x,y):=y-x as the inbuilt,
  917.  eternal and unchangeable default. Thus the function `token` is missing.
  918.  The first `token` holds the column to generate. The next `token` holds the
  919.  `column` to take the `data` from. If the next `token` holds a '-' sign,
  920.  the function result is negated, resulting in f(x,y):=x-y. If this `token`
  921.  does not hold a '-' it is directly interpreted as the next one, which holds
  922.  the start row and the next the end row. As usual empty or zero tokens mean
  923.  boundary values that is first or last row. The first entry in the
  924.  destination column is marked void.
  925.  
  926.  See also `contract`.
  927.  
  928. 3 diff
  929. ?diff
  930.  Computes the average difference of the entries in a column in a better and
  931.  faster way then a combined `delta` and `average`. It uses the so called
  932.  "far differences method" which produces much better results than the above,
  933.  if you have more than 6 items. The item count however must be even or the
  934.  last item will be ignored.
  935.  
  936.  The first `token` holds the column to process and the second may optionally
  937.  hold a weight column. By now the latter is simply averaged to compute a mean
  938.  error, which is in turn stored to DPSMX. The mean itself is posted on screen
  939.  and of course stored to the global maths variable DPMX.
  940.  
  941.  Example:
  942.  
  943.          #diff 3
  944.          ! Wavelength
  945.          #post 2DPMX
  946.  
  947.  Suppose column 3 holds the coordinates where zero amplitudes of a standing
  948.  wave have been encountered. `diff` computes the average difference between
  949.  those coordinates that is half the wavelength. The `post` command doubles it
  950.  and puts the result on screen.
  951.  
  952.  See also `average`, `delta` and `post`.
  953.  
  954. 3 digital
  955. ?digital
  956.  Sets the `precision` fixed to the decimal point for the column. The argument
  957.  is the decadic exponent of the last significant cypher.
  958.  
  959.  Example:
  960.          #digital 2 -2
  961.          #digital 3  1
  962.  
  963.  will cause the number 123.456 to appear as 123.46 in column 2 and as 120 in
  964.  column 3.
  965.  
  966.  Beyond that a minimum error is computed for that column which is used in
  967.  averaging, etc. when no error column is specified to avoid meaningless
  968.  results.
  969.  
  970.  See also `prec` and `average`.
  971.  
  972. 3 dos
  973. ?dos
  974.  This command passes whatever it is followed by to the operating system's
  975.  command processor.
  976.  
  977.  Example:
  978.  
  979.        #term gnuplot
  980.        #write "MyPlot.dta" "MyPlot.gnu"
  981.        #dos gnuplot MyPlot.gnu
  982.  
  983.  will imediately plot your results.
  984.  
  985. 3 dsize
  986. ?dsize
  987.  Sets the maximum number of rows that all columns of the table may hold. This
  988.  command should preceed the `columns` command.
  989.  
  990.  If no `dsize` command preceeds the `columns` command, `columns` will default
  991.  the table size to 10 rows. If a table exceeds the given size, DataProc will
  992.  try to enlarge it, by either doubling the current size or adding 100 rows,
  993.  whatever is smaller. Note that this might cause memory fragmentation and
  994.  takes some time, if you have a lot of columns. So if you encouter memory
  995.  problems, try to specify a tight -- but sufficient -- `dsize`.
  996.  
  997.  `dsize` may now appear anywhere in the commandfile. Note that in previous
  998.  releases this might have caused severe crashes. Anyhow, you cannot shrink
  999.  tables. If you specify a size smaller than the current size, `dsize` will
  1000.  be ignored. If you want to save memory during runtime shrinking a table,
  1001.  you must `reset`.
  1002.  
  1003.  Example:
  1004.  
  1005.          #dsize 40
  1006.  
  1007.  Sets the maximum number of rows in the data file to 40.
  1008.  
  1009.  See also `columns` and `reset`.
  1010.  
  1011. 3 else
  1012. ?else
  1013.  Will switch to the other condition of an `if` statement. If the last
  1014.  `if` already encountered an `else`, it will cancel this `if` and
  1015.  `else` refers to the previous nesting level.
  1016.  
  1017.  See also `if`, `endif` and `ask`.
  1018.  
  1019. 3 endif
  1020. ?endif
  1021.  Cancelles an `if` nesting level and returns to non conditional execution.
  1022.  
  1023.  See also `if` and `else`.
  1024.  
  1025. 3 exit
  1026. ?exit
  1027.  Causes DataProc to terminate immediately. Any further data either in
  1028.  the current or the parental file or files will be ignored.
  1029.  
  1030.  See also `quit`.
  1031.  
  1032. 3 flushset
  1033. ?flushset
  1034.  Annihilates all assignments to terminal enviroment variables done by
  1035.  `storeset` at one time.
  1036.  
  1037.  Example:
  1038.  
  1039.        ; adapt to german language and EEPIC output
  1040.        #include deutEEP
  1041.        ; do something
  1042.        ; prepare output for a doubly logarithmic regression
  1043.        #term latex
  1044.        #storeset aID Exponent
  1045.        ; produce some output
  1046.        ; and return to the "deutEEP" settings
  1047.        #flushset
  1048.  
  1049.  See also `storeset`, `set` and `reset`.
  1050.  
  1051. 3 flushvar
  1052. ?flushvar
  1053.  This function clears all global constants. I'm not sure, if you might have
  1054.  need for it, because `reset` does this as well, but if you should, here it
  1055.  is.
  1056.  
  1057.  See also `reset`.
  1058.  
  1059. 3 func
  1060. ?func
  1061.  The next `token` numbers a function that is explained in the rest of the line
  1062.  to the maths processor. By this number `make`, `count` and `scale` reference
  1063.  their functions. Note that since 1.231 you may place an undefined global
  1064.  variable instead of a defined number token. DataProc will seek for an empty
  1065.  slot and define the global with the number it assigned the function.
  1066.  
  1067.  The name of the arguments are arbitrary, but the sequence left to right
  1068.  corresponds to the left to right sequence how `make` passes the cell values
  1069.  of its designated argument columns.
  1070.  
  1071.  Example:
  1072.  
  1073.          #func 4 c(a,b):=a/b
  1074.          #func 5 errc(a,b,sa,sb,c):=c*sqrt((sa/a)^2+(sb/b)^2)
  1075.  
  1076.  Computes a value c as the quotient of a and b and its error by the Gauss
  1077.  error propagation for potency expressions. The `make` command my look as
  1078.  follows:
  1079.  
  1080.          #make 5 4 1 3
  1081.          #make 6 5 1 2 3 4 5
  1082.  
  1083.  This would expect a to be in column 1, its error in 2, b in 3, its error
  1084.  in 4 and would generate the quotient c to column 5 and its error to 6.
  1085.  
  1086.  See also `make`, `count`, `scale`, `generate` and `math`.
  1087.  
  1088. 3 generate
  1089. ?generate
  1090.  This command is similar to `make`. The difference is that it does not
  1091.  execute during the `data` read, but it does generate a new column immediately
  1092.  from the already read table.
  1093.  
  1094.  The syntax differs a little from `make`. The first `token` holds the column
  1095.  number to generate. The next two tokens hold the start and end row to
  1096.  process. Empty tokens or zeroes are interpreted as boundary values, meaning
  1097.  first and last row. The next token holds the function number. The value -1
  1098.  calls the inbuilt function that results with the row number. The following
  1099.  tokens are just as `make` the function arguments.
  1100.  
  1101.  Example:
  1102.  
  1103.          well we read some data to column 1 and 2 ...
  1104.  
  1105.          #lreg 1 2
  1106.          #func 1 delta(x,y):=abs(y-DPA*x-DPB)
  1107.          #generate 3 0 0 8 1 2
  1108.  
  1109.  Column 3 will then hold the absolute difference to the mean straight line.
  1110.  
  1111.  See also `make`, `columns` and `func`.
  1112.  
  1113. 3 globtitle
  1114. ?globtitle
  1115.  globtitle sets a global title to the whole table. The next `token` is
  1116.  interpreted as a string which is used to name the table. See the
  1117.  `terminal` section for more information about titles.
  1118.  
  1119.  See also `title`.
  1120.  
  1121. 3 group
  1122. ?group
  1123.  The first `token` is expected to hold a group number. If the group number is
  1124.  new, a new group is allocated. The following tokens hold a list of columns
  1125.  to add to the group. You cannot shrink a group by now.
  1126.  
  1127.  Grouping is mainly a formatting advise for the `terminal` driver. Table
  1128.  drivers for instance should equip groups with a common title as specified
  1129.  by the `name` command.
  1130.  
  1131.  Example:
  1132.          #group 1 5 6
  1133.          #group 1 7
  1134.          #group 1 6
  1135.  
  1136.  The first command allocates the group 1 and specifies the columns 5 and 6 as
  1137.  its members. The second command adds column 7 to the same group that now
  1138.  holds the columns 5, 6 and 7. As column 6 is already in the group the third
  1139.  command is ignored.
  1140.  
  1141.  See also `globtitle`, `title` and `name`.
  1142.  
  1143. 3 gtitle
  1144. ?gtitle
  1145.  Sets a secondary title to a column. Works just as `title`, but the argument
  1146.  string is stored to a different place. This title should be used to e.g.
  1147.  name the points in a plot. See the `terminal` section for more information
  1148.  about titles.
  1149.  
  1150.  Example:
  1151.  
  1152.          #gtitle 2 "Counter rates"
  1153.  
  1154.  Sets the gtitle to "Counter rates". The gnuplot terminal will thus name the
  1155.  data plot "Counter rates".
  1156.  
  1157.  See also `title` and `rtitle`.
  1158.  
  1159. 3 if
  1160. ?if
  1161.  Initiates a conditional block of statements. The rest of the line is passed
  1162.  to the maths processor and the result is checked. Any value greater than
  1163.  zero denotes TRUE, zero or less FALSE.
  1164.  
  1165.  If FALSE, control will not execute any command until `else` or `endif` is
  1166.  encountered.
  1167.  
  1168.  If TRUE, control will continue execution until `else` is encountered. In
  1169.  that case the block will be skipped until `endif` appeares. `else` is of
  1170.  course not obligatory.
  1171.  
  1172.  See also `else`, `endif` and `ask`.
  1173.  
  1174. 3 include
  1175. ?include
  1176.  The following `token` is the filename to include. If the file does not open,
  1177.  DataProc retries filename.tst and if that fails, too, it issues a "File does
  1178.  not exits" error. The include file is expected to be a `commandfile`, just
  1179.  like the one calling for `include`. This is especially handy, if you e.g.
  1180.  create your data automatically and have to process them just the same
  1181.  every time. So you would write a commandfile inputting theese data. Another
  1182.  extremely practical usage is to create a datafile by the current script
  1183.  and reread the preprocessed data after resetting the table to the same
  1184.  script. Well, possibilities seem infinite.
  1185.  
  1186.  Whatever is in the file is handeled as if it were part of the original file.
  1187.  You may nest `include` as deep you will. As the algorithm is recursive you
  1188.  may be well advised to increase stack for extremely deep include nests. On
  1189.  other machines like MS-DOS you might have to increase the FILES entry in
  1190.  your config.sys, but DataProc's concept has no problem with deep nesting.
  1191.  
  1192.  You should however ensure, that you do not create include loops, meaning a
  1193.  subfile including one of its parentals. DataProc doesn't check that and will
  1194.  crash sooner or later, because of stack leakage or other system odds.
  1195.  Depending on the runtime system of the compiler it might even leave files
  1196.  open, what may have severe consequences to your filesystem. On some systems
  1197.  the medium will become unreadable and will have to be reformatted!!!
  1198.  
  1199. 3 leave
  1200. ?leave
  1201.  Works similar to `slip` but marks the column to permanently hold misresults
  1202.  until a `take` command disables `leave`. This command is used to exclude
  1203.  groups of results from a regression, e.g. a non linear area.
  1204.  
  1205.  The argument `token` holds the column number to mark as misresults. If the
  1206.  column number zero is specified `leave` marks all read columns as misresults.
  1207.  Note the the column number refers to the logical read column as assigned by
  1208.  `using`.
  1209.  
  1210.  Anything that is gained by further processes of a marked entry (e.g. by
  1211.  `make` or `generate`) is also marked.
  1212.  
  1213.  See also `make`, `using`, `columns`, `slip` and `take`.
  1214.  
  1215. 3 logline
  1216. ?logline
  1217.  Whatever follows the command will be written to the current logfile. If no
  1218.  logfile is opened, the command will be ignored.
  1219.  
  1220.  Example:
  1221.  
  1222.        #newlog "Important.log"
  1223.        #logline Now comes the most important thing ever!
  1224.  
  1225.  Will open a new file called "Important.log" overwriting existing an existing
  1226.  file and write "Now comes the most important thing ever!" to it.
  1227.  
  1228.  See also `applog`, `logpost` and `newlog`.
  1229.  
  1230. 3 logpost
  1231. ?logpost
  1232.  Works exactly like `post`, but redirects its output to the current logfile.
  1233.  If you did not open any logfile, the command is ignored.
  1234.  
  1235.  See also `applog`, `logline`, `newlog` and `post`.
  1236.  
  1237. 3 logreg
  1238. ?logreg
  1239.  Works just like `lreg`, but the first `token` is interpreted as a regression
  1240.  mode. Specifying zero makes this command equivalent to `lreg`. One causes
  1241.  logarithmic scaling on the x-axis, two on the y-axis and 3 on both.
  1242.  
  1243.  This command uses the decadic logarithm. The results that are posted to the
  1244.  terminal and set to DPA, DPB, DPSA, DPSB and DPR are the parameters of the
  1245.  straight line. It is the user's task and the task of the `terminal` drivers
  1246.  to interpret theese results correctly.
  1247.  
  1248.  For more information see `lreg`.
  1249.  
  1250. 3 lreg
  1251. ?lreg
  1252.  Starts a linear regression. The arguments are: x-column, y-column, y-weight,
  1253.  startrow and endrow. Only the first two cannot be omitted. An empty or zero
  1254.  startrow or endrow sets this value to firstrow or lastrow.
  1255.  
  1256.  If a weight column is specified a weighted regression will be done. If not,
  1257.  well DataProc does a simple regression.
  1258.  
  1259.  The regression results are hooked to the y-column. Output terminals may care
  1260.  to output them when outputting the y-column. See the `terminal` section for
  1261.  more information.
  1262.  
  1263.  Beyond that the variable DPA, DPB, DPSA, DPSB and DPR of the math processor
  1264.  are set to the regression results. Where DPA holds ascend of the regression
  1265.  straight line, DPSA its error, DPB the y-offset and DPSB the error of the
  1266.  latter and DPR the correlation ratio.
  1267.  
  1268.  Regression results are monitored to 'stdout' (usually the screen) during
  1269.  execution of the `commandfile`.
  1270.  
  1271.  Example:
  1272.  
  1273.          #lreg 1 3//8 0
  1274.  
  1275.  Does an unweighted linear regression of column 3 against column 1 beginning
  1276.  with row number 8.
  1277.  
  1278.  See also `logreg`, `areg`, `average`, `math` and `post`.
  1279.  
  1280. 3 make
  1281. ?make
  1282.  This command specifies a function to generate an entry in a column from a
  1283.  number of  entries in other columns. All entries belong to the same row.
  1284.  Note that `make` won't overwrite valid data. If you want it to, use `void`
  1285.  to mark it invalid.
  1286.  
  1287.  The first `token` designates the column to generate, the second the function
  1288.  number to use (see `func` for more info) and the following tokens are the
  1289.  column numbers which the function arguments are to be taken from.
  1290.  
  1291.  Example:
  1292.  
  1293.          #make 3 1 4 5
  1294.  
  1295.  generates the entries of column 3 using the function 1 passing it the
  1296.  contents of columns 4 and 5 as arguments each row. The whole thing might
  1297.  look as follows:
  1298.  
  1299.          #func 1 f(x,y):=x+y
  1300.          #using 4 5
  1301.          #make 3 1 4 5
  1302.  
  1303.  would read the data in the file to columns 4 and 5 and would store their
  1304.  sum in column 3.
  1305.  
  1306.  The sequence of the `make` commands is irrelevant. Before execution they
  1307.  are sorted as necessary that all columns hold valid data before being
  1308.  passed as arguments. An error will be issued, if that is not possible.
  1309.  
  1310.  See also `func`, `count`, `generate`, `scale`, `undo` and `void`.
  1311.  
  1312. 3 mark
  1313. ?mark
  1314.  This command is used to `define` a global variable to the current row number.
  1315.  It is helpful to make row boundaries easier -- you don't have to count
  1316.  anymore -- and more transparent. The only argument is the name of the variable
  1317.  to define. Note that you cannot redefine variables. Use `undefine` to free
  1318.  them first.
  1319.  
  1320.  Example:
  1321.  
  1322.          some data here ...
  1323.  
  1324.          #mark RegStart
  1325.  
  1326.          some data there ...
  1327.  
  1328.          #mark RegEnd
  1329.  
  1330.          and there may be still some ...
  1331.  
  1332.          #lreg 1 2//RegStart RegEnd
  1333.  
  1334.  This would cause `lreg` to do an unweighted regression of column 2 to 1
  1335.  beginning with the data set following the #mark RegStart and ending with
  1336.  the data set following #mark RegEnd -- both inclusive.
  1337.  
  1338.  See also `define`, `undefine` and `queue`.
  1339.  
  1340. 3 math
  1341. ?math
  1342.  Whatever follows this command is directly passed to the maths processor.
  1343.  You will usually use it to compute results from regression data and use
  1344.  them as constants in new functions or `post` them on screen.
  1345.  
  1346.  Example:
  1347.  
  1348.          #title 1 diameter
  1349.          #unit 1 cm
  1350.          #digital 1 -2
  1351.          #using 1
  1352.  
  1353.          then some data follows
  1354.  
  1355.          #average 1
  1356.  
  1357.          #math l:=mx*pi
  1358.          #math sl:=smx*pi
  1359.  
  1360.          ! The average length of the peripherial is
  1361.          #post l
  1362.          ! with an average error of
  1363.          #post sl
  1364.  
  1365.  Well, that speaks for itself, doesn't it?
  1366.  
  1367.  See also `func` and `post`.
  1368.  
  1369. 3 mean
  1370. ?mean
  1371.  Works similar to `make`, but you cannot choose an arbitrary function. As
  1372.  with `make` the first `token` holds the destination `column`. The next
  1373.  tokens hold a list of source columns. The entries of the destination
  1374.  columns are filled with the mean of the source columns during the `data`
  1375.  reading procedure.
  1376.  
  1377.  You can reference the error of the mean using the `smean` command.
  1378.  
  1379.  Example:
  1380.  
  1381.          #mean 6 1 2 3 4 5
  1382.          #smean 7 6
  1383.  
  1384.  Stores the mean of columns 1 thru 5 to column 6 and the error of the mean
  1385.  to column 7.
  1386.  
  1387.  See also `smean`, `make` and `average`.
  1388.  
  1389. 3 meanof
  1390. ?meanof
  1391.  In many cases you need the average of a well defined set of values for
  1392.  further computation. `meanof` frees you of the task of typing it as two
  1393.  `math` lines. The syntax is pretty simple. The first token holds the
  1394.  name to store the average to, the second the name of its error, then
  1395.  a list of maths expressions must follow. Note that you must at least
  1396.  supply two expression tokens. Beyond that the total number is arbitrary.
  1397.  
  1398.  Example:
  1399.  
  1400.        #meanof mr smr r1 "2*r2" 123
  1401.  
  1402.  Will compute the average of r1, (2*r2) and 123 and store it to mr. The
  1403.  average spot check error.
  1404.  
  1405.  See also `mean` and `wmeanof`.
  1406.  
  1407. 3 merge
  1408. ?merge
  1409.  Adds up to 20 columns to a data column for output purposes. This is used
  1410.  to plot more than one column's data in a single diagram by means of the
  1411.  "gnuplot" terminal driver. See the `terminal` section for more information
  1412.  of how the terminals handle merges.
  1413.  
  1414.  Example:
  1415.  
  1416.          #merge 2 5 6 7
  1417.  
  1418.          well, there might be anything
  1419.  
  1420.          #term gnuplot
  1421.          #ocol 1 2
  1422.          #write "data.dta" "data.gnu"
  1423.  
  1424.  This will produce a graph showing the behaviour of the y-data in coloumns
  1425.  2 5 6 and 7 to the x-data in column 1. Without the `merge` command only the
  1426.  data in column 2 would be taken.
  1427.  
  1428.  See also `ocol` and `write`.
  1429.  
  1430. 3 name
  1431. ?name
  1432.  This command sets a title common to a group. If you are measuring for
  1433.  example a set of parameters of a gas at different pressures, you would
  1434.  put all measuring series to a common pressure into a group and name it
  1435.  according to the pressure used.
  1436.  
  1437.  The first `token` holds the group number as specified by a `group` command.
  1438.  The second `token` holds the title for the group.
  1439.  
  1440.  Example:
  1441.  
  1442.          #group 1 1 2 3
  1443.          #group 2 4 5 6
  1444.          #group 3 7 8 9
  1445.          #name 1 "700 mbar"
  1446.          #name 2 "800 mbar"
  1447.          #name 3 "900 mbar"
  1448.  
  1449.  See also `group`, `globtitle` and `title`.
  1450.  
  1451. 3 newlog
  1452. ?newlog
  1453.  This command opens a file to store some scratch that you would usually
  1454.  write on some sheet for further evaluation during the formulation of
  1455.  your data analysis. If the file given with the first token already exists,
  1456.  it will be overwritten.
  1457.  
  1458.  See also `applog`, `logline` and `logpost`.
  1459.  
  1460. 3 nop
  1461. ?nop
  1462.  No operation. This command does absolutely nothing and is only a kludge
  1463.  for debugging purposes.
  1464.  
  1465. 3 ocol
  1466. ?ocol
  1467.  This command is followed by a list of physical `column` numbers. The
  1468.  terminal output is generated from that list in the given sequence. It
  1469.  also assigns the logical write numbers of the columns. It is the pendant
  1470.  to `using` doing the same for data input.
  1471.  
  1472.  Example:
  1473.  
  1474.          #term gnuplot
  1475.          #ocol 2 9 7
  1476.          #write "data.dta" "data.gnu"
  1477.  
  1478.  This will output in sequence the columns 2, 9 and 7 to "data.dta". The
  1479.  "gnuplot" `terminal` will interpret that as x-data, y-data and y-errors
  1480.  and will thus output the corresponding command sequence to "data.gnu".
  1481.  
  1482.  See also `term`, `write` and `using`.
  1483.  
  1484. 3 post
  1485. ?post
  1486.  Whatever stands behind `post` is passed to the maths processor, unless
  1487.  the first token is found as a `global string` as defined in `build`.
  1488.  The result is then printed on screen during execution of the `commandfile`.
  1489.  
  1490.  See `math` for an example. See also `build`, `func`, `lreg` and `average`.
  1491.  
  1492. 3 preamble
  1493. ?preamble
  1494.  The string following this command is set in front of any terminal output
  1495.  via `write`. Internally the string is passed to an fprintf() function,
  1496.  so mind the C type character specials. If the first token is found to
  1497.  be a `global string` as defined by `build` its contents are used to
  1498.  fill the preamble.
  1499.  
  1500.  Future versions will support the printout of internal values, but this is
  1501.  not yet implemented. Even the C type formatting characters don't seem to
  1502.  work properly.
  1503.  
  1504.  Example:
  1505.  
  1506.          #term gnuplot
  1507.          #preamble 'set terminal eepic; set size 1,1.5; set output "data.gph"'
  1508.  
  1509.  These commands select the GnuPlot driver as output terminal and the preamble
  1510.  in turn inits GnuPlot to output an EEPIC data file to "data.gph" in my
  1511.  preferred size.
  1512.  
  1513.  See also `term`, `write` and `unamble`.
  1514.  
  1515. 3 prec
  1516. ?prec
  1517.  Sets the precision for one column or defaults it for all columns if the column
  1518.  number 0 is passed. Precision means the number of significant cyphers to
  1519.  display. It does not affect the internal computations.
  1520.  
  1521.  Example:
  1522.  
  1523.          #prec 0 4
  1524.          #prec 1 5
  1525.  
  1526.  will at first default the precision to 4 significant cyphers for all columns
  1527.  and then define the higher precision 5 for column 1. Thus:
  1528.  
  1529.    3.0145   will result 3.0145 and in column 1: 3.0145
  1530.    3.01458  will result 3.0146 and in column 1: 3.01458  (last digit rounded)
  1531.    0.0003   will result 300e-6 and in column 1: 0.0003   (exponents are
  1532.                                                           multiples of 3)
  1533.    etc.
  1534.  
  1535.  See also `digital`.
  1536.  
  1537. 3 queue
  1538. ?queue
  1539.  Defines a chain of global variables, meaning a number of those with following
  1540.  numbers. This is especially useful, if you want to name the coloumns of your
  1541.  table. The first entry is expected to hold the value of the first global
  1542.  variable in the list. This may of course also be a global variable. The
  1543.  following tokens hold an arbitrary list of global variables to `define`. Note
  1544.  that you cannot redefine variables, use `undefine` to free them first.
  1545.  
  1546.  Example:
  1547.  
  1548.          #queue 3 myvar1 myvar2 myvar3
  1549.  
  1550.  would set myvar1 to 3, myvar2 to 4 and myvar3 to 5.
  1551.  
  1552.  See also `define`, `undefine` and `mark`.
  1553.  
  1554. 3 quit
  1555. ?quit
  1556.  Causes DataProc to terminate the current file. In the main commandfile
  1557.  this will terminate execution -- just like `exit`. In children files
  1558.  this will return control to the parent.
  1559.  
  1560.  See also `exit` and `include`.
  1561.  
  1562. 3 read
  1563. ?read
  1564.  Well, for all practical purposes this command became meaningless. You should
  1565.  not use it. It redefines the format of logical read columns. The syntax is
  1566.  just like the `columns` command, but the identifiers refer to the logical
  1567.  read columns and not to physical columns.
  1568.  
  1569.  See also `using` and `columns`.
  1570.  
  1571. 3 readvar
  1572. ?readvar
  1573.  This command enables you to define math variables during runtime. The
  1574.  first token holds the variable name, the rest of the line is posted
  1575.  to the screen and a prompt is added. Execution waits for a float number
  1576.  to be entered and will assign its value to the given variable.
  1577.  
  1578.  See also `ask` and `stop`.
  1579.  
  1580. 3 remcol
  1581. ?remcol
  1582.  Removes a column from the current table. `remcol` must be followed by a
  1583.  physical column number. I am not sure, if it is always save to use that
  1584.  function, but if you are in trouble with memory space, you might welcome
  1585.  this function. Anyhow, if you find crashes that may be caused by `remcol`
  1586.  report them and I will see what I can do.
  1587.  
  1588.  See also `addcol` and `columns`.
  1589.  
  1590. 3 reset
  1591. ?reset
  1592.  Starts a new table and thus forgets all columns, regressions, etc. that have
  1593.  been done previously. The math processor is however not affected by reset and
  1594.  thus all variables, constants and functions are still available.
  1595.  
  1596.  reset attempts to free all the memory allocated by table private structures.
  1597.  I am not sure if it is always succesful in freeing everything. So if you
  1598.  should have memory troubles a reorganization of the `commandfile` may take
  1599.  you out of there.
  1600.  
  1601.  After processing reset the declarations for `dsize` and `columns` must be
  1602.  newly set, because the previous are forgotten and deallocated. Global
  1603.  variables are also forgotten. Terminal enviroment variables however are
  1604.  not affected by `reset`.
  1605.  
  1606.  See also `dsize`, `define`, `set` and `columns`.
  1607.  
  1608. 3 row
  1609. ?row
  1610.  Sets the row counter to the specified value. This is useful especially
  1611.  to read data for different columns from different files as well as to
  1612.  partially replace data in an already made table. Be careful using this
  1613.  command, you can easily produce "white spots" in your table. The command
  1614.  only checks that you do not exceed the maximum size as defined by the
  1615.  `dsize` command.
  1616.  
  1617.  Example:
  1618.  
  1619.        #using 1
  1620.        #include "Col1.dta"
  1621.        #row 0
  1622.        #using 2
  1623.        #include "Col2.dta"
  1624.  
  1625.  This would read column one from "Col1.dta" and later read the same rows
  1626.  but in column two from "Col2.dta".
  1627.  
  1628.  See also `using`, `include`, `void`.
  1629.  
  1630. 3 rtitle
  1631. ?rtitle
  1632.  Sets a secondary title to a column. Works just as `title`, but the argument
  1633.  string is stored to a different place. This title should be used to e.g.
  1634.  name the regression graph in a plot. See the `terminal` section for more
  1635.  information about titles.
  1636.  
  1637.  See also `title`, `gtitle` and `runit`.
  1638.  
  1639. 3 runit
  1640. ?runit
  1641.  Sets a secondary unit to a column. Works just as `unit`, but the argument
  1642.  string is stored to a different place. This title should be used for
  1643.  hybrid units like in regressions. If no `runit` is specified, the terminals
  1644.  should care to create their own hybrids. See the `terminal` section for
  1645.  more information about units.
  1646.  
  1647.  See also `unit`, `runit`, `gtitle` and `title`.
  1648.  
  1649. 3 scale
  1650. ?scale
  1651.  Sets a function to scale data before storing it to the table. The function
  1652.  must expect one argument of course. `scale` expects the physical column
  1653.  number.
  1654.  
  1655.  Example:
  1656.  
  1657.          #func 1 f(x):=x/milli
  1658.          #scale 2 1
  1659.  
  1660.  For example the data unit of column 2 may be meters, but you measured
  1661.  millimeters and thus copied them to the `data` section. The `scale`
  1662.  command will care for that problem and divide all values by milli.
  1663.  
  1664. 3 set
  1665. ?set
  1666.  Sets a terminal enviroment variable. Please refer to the `terminal` section
  1667.  for the meaning of such variables to the terminals. The first `token` is
  1668.  expected to be the variable name and whatever follows will be stripped of
  1669.  leading and trailing spaces and set to the variable value, unless the first
  1670.  token is identified as a `global string` as defined by `build` what sets
  1671.  its contents.
  1672.  
  1673.  The variable is -- just as the `preamble` -- hooked on the terminal. It will
  1674.  not be affected by `reset` and each terminal holds its own set of enviroment
  1675.  variables. Thus you must first activate the terminal, you want to change the
  1676.  variable in (see `term`). `set` redefines without any warnings, unlike e.g.
  1677.  `define`.
  1678.  
  1679.  Example:
  1680.  
  1681.          #set output myfile.gph
  1682.          #set author Lars Hanke
  1683.  
  1684.  sets the enviroment variable "output" to "myfile.gph" and "author" to
  1685.  "Lars Hanke". Note that the variable name is a system token and thus not
  1686.  case sensitive.
  1687.  
  1688.  See also `unset` and `term`.
  1689.  
  1690. 3 slip
  1691. ?slip
  1692.  Marks the following row of the specified column or of all columns, if column
  1693.  number 0 is given, a misresult that should not be used for regression or
  1694.  averaging. Note that anything computed from that entry e.g. by `make` or
  1695.  `generate` will bear the same mark. Also note the the `diff` command will
  1696.  ususally produce bad results, if an item is left out.
  1697.  
  1698.  The first `token` holds the `column` to affect. If zero is specified it
  1699.  affects all column `data` is read to. Other tokens are ignored. `slip` is
  1700.  only valid for one single row. It is used to mark one single misresult.
  1701.  Note that the column number refers to the logical read column as assigned
  1702.  by `using`.
  1703.  
  1704.  Example:
  1705.          3/3/1
  1706.          #slip 2
  1707.          4/9/1
  1708.          5/5/1
  1709.  
  1710.  Obviously the result should have been something like 4/4/1 and 4/9/1 will
  1711.  destroy any good regression, so this single line will not be considered by
  1712.  a later `lreg` command.
  1713.  
  1714.  See also `average`, `lreg`, `diff`, `using`, `columns`, `leave` and `take`.
  1715.  
  1716. 3 smean
  1717. ?smean
  1718.  This stores the error of the last `mean` command to a new column. The first
  1719.  `token` holds the column to store the error to and the second `token` holds
  1720.  the column the `mean` was stored to. The whole thing is done during the
  1721.  `data` read procedure.
  1722.  
  1723.  See also `mean`.
  1724.  
  1725. 3 stop
  1726. ?stop
  1727.  Promts the rest of the line on screen and waits for any key to be pressed.
  1728.  You should use this function to stop a screen scrolling by and watch some
  1729.  results.
  1730.  
  1731.  Note that a nonzero batch level will cause this command to always continue.
  1732.  
  1733.  See also `batch`.
  1734.  
  1735. 3 storekill
  1736. ?storekill
  1737.  This command is used to locally unset a terminal enviroment variable.
  1738.  The syntax and function is equivalent to `unset`, but this command is
  1739.  tracked and the variable will be restored with a call to `flushset`.
  1740.  
  1741.  See also `flushset`, `storeset` and `unset`.
  1742.  
  1743. 3 storeset
  1744. ?storeset
  1745.  This command is used to locally set a terminal enviroment variable. The
  1746.  syntax is exactly equal to `set`, but this command is tracked and may
  1747.  be annihilated by `flushset`. This is useful, if you preset your
  1748.  terminals with e.g. a language definition file and want to change some
  1749.  settings for a specific output.
  1750.  
  1751. 3 tagdata
  1752. ?tagdata
  1753.  Produces a clear data entry to a tagfile. Accepts an arbitrary number of
  1754.  arguments that may be global strings or math expressions. Note that all
  1755.  arguments are tokens. The arguments are evaluated and written to the
  1756.  tagfile using the separator given in the first token. If the first token
  1757.  is longer than a single character, it will be evaluated as first data entry
  1758.  and the separator will default to '/'.
  1759.  
  1760.  Example:
  1761.  
  1762.        #tagdata & mystr 3*4 2+pi
  1763.  
  1764.  will write "(contents of mystr)&12&5.14..." to the tagfile
  1765.  
  1766.  See also `tagfile` and `tagpost`.
  1767.  
  1768. 3 tagfile
  1769. ?tagfile
  1770.  Opens a tagfile or - if you would rather have it - only one tag. A tagfile
  1771.  is a textfile containing marks which areas belong to which source files.
  1772.  You may post an arbitrary number of lines to each tag and finally read it
  1773.  as an input file for DataProc again. As all tags are assured to start with
  1774.  a comment, DataProc won't notice them while rereading such a file.
  1775.  
  1776.  The syntax is tagfilename in the first and tagname in the second token.
  1777.  The tagname may be a global string.
  1778.  
  1779.  Calling `tagfile` automatically closes previously opened tagfiles and
  1780.  automatically appends new tags, if the given tag is not in the file. It
  1781.  also creates new tagfiles, if the given filename is not found.
  1782.  
  1783.  Example:
  1784.  
  1785.        [something computed the maths: amp amperr DPA DPSA DblDPA DblDPSA]
  1786.  
  1787.        #tagfile "MyTags" File1Results
  1788.        #build regress1 "%f/%f/%f/%f" amp amperr DPA DPSA
  1789.        #build regress2 "%f/%f/%f/%f" 2*amp 2*amperr DblDPA DblDPSA
  1790.        #tagpost regress1
  1791.        #tagpost regress2
  1792.  
  1793.  This would always maintain two data entries in the tagfile "MyTags". You
  1794.  may later reread the tagfile as input for another table. This is extremely
  1795.  useful, if you have to regress or average the results of several regressions
  1796.  or averages of different tables.
  1797.  
  1798.  See also `tagpost` and `newlog`.
  1799.  
  1800. 3 tagpost
  1801. ?tagpost
  1802.  Works exactly like `post`, but the results are written to the current tagfile.
  1803.  If no tagfile exists, the command will be ignored.
  1804.  
  1805.  See also: `tagfile`, `post` and `logpost`.
  1806.  
  1807. 3 take
  1808. ?take
  1809.  Removes the misresult tag set by `leave` from a column or from all columns
  1810.  if column number zero is specified.
  1811.  
  1812.  The argument `token` holds the logical read column to affect.
  1813.  
  1814.  See also `leave`.
  1815.  
  1816. 3 term
  1817. ?term
  1818.  Specifies an output terminal driver. The next `token` is expected to be
  1819.  the terminal name. For more information about terminals and output see
  1820.  the `terminal` section.
  1821.  
  1822.  See also `write`.
  1823.  
  1824. 3 title
  1825. ?title
  1826.  Sets a title to a specific column. The command has standard syntax. The
  1827.  argument `token` holds the string to be used as the column's title. See
  1828.  the `terminal` section for more information about titles.
  1829.  
  1830.  Example:
  1831.  
  1832.          #title 2 Speed
  1833.  
  1834.  Sets the title "Speed" to the physical column 2.
  1835.  
  1836.  See also `gtitle`, `rtitle`, `unit` and `globtitle`
  1837.  
  1838. 3 unamble
  1839. ?unamble
  1840.  Deletes a `preamble` from a terminal. Just to get rid of formerly defined
  1841.  terminal initialization strings.
  1842.  
  1843.  See also `term` and `preamble`.
  1844.  
  1845. 3 undefine
  1846. ?undefine
  1847.  Cancelles a global variable as defined by `define`, `queue` or `mark`. It
  1848.  also frees its memory. You may pass as many variables as you like to free.
  1849.  
  1850.  Example:
  1851.  
  1852.          #undefine myvar1 myvar2 myvar3
  1853.  
  1854.  will free all the 3 variables named. If a variable is not found, `undefine`
  1855.  doesn't care.
  1856.  
  1857.  See also `define`, `queue` and `mark`.
  1858.  
  1859. 3 undo
  1860. ?undo
  1861.  Removes a `make` directive from a column and thus stops its automatic
  1862.  generation. `undo` removes `mean` and `smean` directives as well.
  1863.  
  1864.  Example:
  1865.  
  1866.          #make 3 1 4 5
  1867.  
  1868.          column 3 is now generated using function 1 with columns 4 and 5
  1869.          as function arguments.
  1870.  
  1871.          #undo 3
  1872.  
  1873.          column 3 won't be generated any longer
  1874.  
  1875.  See also `make`, `mean` and `smean`.
  1876.  
  1877. 3 unit
  1878. ?unit
  1879.  Set the name of the unit in the specific column. In fact this is nothing
  1880.  else than another `title`. The terminals care for a handling of the unit
  1881.  string as a unit. See the `terminal` section for more information about
  1882.  titles and units.
  1883.  
  1884.  Example:
  1885.  
  1886.          #unit 4 cm
  1887.          #unit 2 "\frac{\mbox{m}}{\mbox{s}}"
  1888.  
  1889.  Sets the unit of the physical column 4 to cm and of column 2 to a LaTeX
  1890.  style command to issue m/s.
  1891.  
  1892.  See also `title`.
  1893.  
  1894. 3 unset
  1895. ?unset
  1896.  Deletes an enviroment variable as defined by `set` from a terminal. See
  1897.  `set` and the `terminal` section for more information about enviroment
  1898.  variables.
  1899.  
  1900.  `unset` may be passed an arbitrary list of enviroment variables. It will
  1901.  attempt to free all of them and won't mind, if any of them exist.
  1902.  
  1903.  Example:
  1904.  
  1905.          #unset author output
  1906.  
  1907.  will free both variables "author" and "output".
  1908.  
  1909.  See also `set` and `term`.
  1910.  
  1911. 3 using
  1912. ?using
  1913.  This command assigns the logical read column numbers. using is followed by
  1914.  a list of physical column numbers that are in turn assigned logical read
  1915.  columns in the given sequence. Columns that do not appear in the list
  1916.  will not be read.
  1917.  
  1918.  Example:
  1919.  
  1920.          #using 3 6 1
  1921.  
  1922.  will read the first data `token` into the physical column 3, the second
  1923.  `token` to column 6 and the third to column 1. Any further data tokens
  1924.  are ignored.
  1925.  
  1926.  See the `data` section for  more information about data tokens, etc.
  1927.  
  1928.  See also `columns` and `ocol`.
  1929.  
  1930. 3 void
  1931. ?void
  1932.  This command marks a block of rows in a column as invalid. The syntax is
  1933.  in sequence: column to affect, first row to mark void and last row to
  1934.  mark void, both inclusively. As the `make` command does not overwrite
  1935.  valid columns, `void` can be used to enable remakes in a second read
  1936.  pass realized by resetting the row counter using the `row` command.
  1937.  
  1938.  See also `row` and `make`.
  1939.  
  1940. 3 wmeanof
  1941. ?wmeanof
  1942.  This function fulfills the same task as `meanof` but is its weighted
  1943.  derivant. The first token holds the variable name to store the average
  1944.  to and the second the variable name to store its spot check error. These
  1945.  tokens are followed by pairs of maths expressions denoting value and their
  1946.  errors each. Note that you must at least supply two pairs -- that is
  1947.  six tokens all in all!
  1948.  
  1949.  See also `meanof`.
  1950.  
  1951. 3 write
  1952. ?write
  1953.  Followed by one to four tokens. The first `token` holds the name of the
  1954.  output file to write to. The second `token` supplies a secondary filename
  1955.  for additional information that is needed by some terminals.
  1956.  
  1957.  The last two tokens hold start and endrow, which are both included. Empty
  1958.  tokens or zeroes are interpreted as maximum values -- meaning first or
  1959.  last row.
  1960.  
  1961.  What columns are written depends on their logical write numbers. See `ocol`
  1962.  for information about assigning logical write numbers.
  1963.  
  1964.  What files are needed, how many columns may be passed and how that is
  1965.  interpreted depends on the selected `terminal`. See the `terminal` section
  1966.  for more information about that.
  1967.  
  1968.  Example:
  1969.  
  1970.          #write "data.dta" "data.gnu" 0 8
  1971.          #write "dat1.dta" //9
  1972.  
  1973.  Writes from the first row to row number 8 to "data.dta" and passes the name
  1974.  "data.gnu" for the driver file. Then outputs the rest to "dat1.dta"
  1975.  specifying no driver file.
  1976.  
  1977.  See also `ocol` and `term`.
  1978.  
  1979. 2 data
  1980. ?data
  1981.  Any line that cannot be processed as a `command`, `comment` or `post` is
  1982.  expected to hold `data`. Data lines are series of tokens. Each `token` is
  1983.  read to a logical read column as defined by `using` in the sequence of
  1984.  their occurence. An empty or missing `token` causes DataProc to copy the
  1985.  last entry again.
  1986.  
  1987.  If the first `token` for a column is read empty the default value on startup
  1988.  is void.
  1989.  
  1990.  Example:
  1991.  
  1992.          #using 1 2 3
  1993.          #math lv:=2*3.9
  1994.  
  1995.          1/2.1
  1996.          2/3.5/6
  1997.          3/4.7
  1998.          4/5.2/3
  1999.          5/6.1
  2000.          6/6.8
  2001.          7/7.2/-
  2002.          8/7.5
  2003.          9/$=lv
  2004.  
  2005.  would result in a table:
  2006.  
  2007.          1 2.1 -
  2008.          2 3.5 6
  2009.          3 4.7 6
  2010.          4 5.2 3
  2011.          5 6.1 3
  2012.          6 6.8 3
  2013.          7 7.2 -
  2014.          8 7.5 -
  2015.          9 7.8 -
  2016.  
  2017.  A `token` is marked void, if the last character is a '-' sign. That does
  2018.  however not apply to string typed data. It is also possible to read in
  2019.  variables from the maths processor as shown in the last line of the above
  2020.  example. The magical sequence '$=' causes DataProc to seek for a variable
  2021.  that is named as the rest of the `token` and put its value there. This
  2022.  feature works with double typed columns as well as with integer typed
  2023.  columns.
  2024.  
  2025. 2 terminals
  2026. ?terminal
  2027.  Together with the regression facilities this is the most useful and complex
  2028.  section. DataProc can issue `data` correctly formatted for a number of other
  2029.  programs. DataProc generates LaTeX tables (tabular enviroments) using the
  2030.  `latex` terminal driver, GNUPLOT data and command files using the `gnuplot`
  2031.  terminal and several other terminal e.g. `plain` which produces a printer
  2032.  output comes with this version. Read this section carefully, because some
  2033.  terminals may handle some situations absolutely different from others.
  2034.  
  2035.  All terminals support preambles, which are outputted at the beginnig of the
  2036.  secondary outputfile. If there is no secondary file for the specified
  2037.  terminal, the preamble goes to the primary. All terminals support backslash
  2038.  controls in their preambles.
  2039.  
  2040.  See also `commands write` and `commands ocol` for the definition of primary
  2041.  and secondary output files, logical write columns, etc. See `commands term`
  2042.  to select a terminal for output.
  2043.  
  2044.  Terminal names aren't case sensitive anymore, for they are system tokens.
  2045.  
  2046. 3 backslash controls
  2047. ?backslash
  2048. ?character
  2049. ?control
  2050.  Some `terminal enviroment variables` allow non-printable characters, or you
  2051.  may wish to set linefeeds etc. into `preambles`. Therefore you may set
  2052.  backslash control sequences. They all begin with the `backslash` '\'. The
  2053.  definitions of those sequences is similar to the C-language character
  2054.  definition. Note that by now you may set '\%' or '%' to result as a percent
  2055.  sign. Future versions may however support arguments and then '\%' will
  2056.  oblige. The characters following the backslash are not case sensitive. By now
  2057.  the following controls are supported.
  2058.  
  2059.  `\\` displays the backslash itself
  2060.  
  2061.  `\0` is compiled to a null character; ASCII code 0.
  2062.  
  2063.  `\b` is compiled to the backspace character.
  2064.  
  2065.  `\d` must be followed by exactly three decimal digits. If you've got less,
  2066.  place leading zeroes. The sequence will be compiled to the ASCII code
  2067.  represented by the decimal number.
  2068.  
  2069.  `\f` is compiled to the formfeed character. This will feed the current page
  2070.  out of a printer or on most systems clear the screen.
  2071.  
  2072.  `\n` is compiled to a linefeed character. On most systems this will not only
  2073.  feed, but also cause a carriage return.
  2074.  
  2075.  `\r` is compiled to a carriage return character.
  2076.  
  2077.  `\t` is compiled to a horizontal tabulator character.
  2078.  
  2079.  `\v` is compiled to a vertical tabulator character.
  2080.  
  2081.  `\x` must be followed by exactly two hexadecimal digits. If you've got only
  2082.  one, place a leading zero. The sequence will be compiled to the ASCII code
  2083.  represented by the hexadecimal number.
  2084.  
  2085.  `\` must be followed by exactly three octal digits. If you've got less,
  2086.  place leading zeroes. The sequence will be compiled to the ASCII code
  2087.  represented by the octal number. Note that there is `no` extra identifier
  2088.  behind the backslash.
  2089.  
  2090. 3 dump
  2091. ?dump
  2092.  This terminal is used to auto-generate `include` files for DataProc itself.
  2093.  It does not do any data formatting, but the result may be read in right
  2094.  away even by the same commandfile e.g. after resetting the current table.
  2095.  The `dump` terminal takes care that information about void data or misresults
  2096.  won't get lost. It may also preserve titles and enviroment variables including
  2097.  preambles.
  2098.  
  2099. 4 enviroments
  2100. ?enviroment
  2101. ?variable
  2102.  The very few supported enviroments for `dump` are:
  2103.  
  2104.  `Global` will issue a #globtitle command to the destination to preserve the
  2105.  current table name.
  2106.  
  2107.  `NoSlip` switches off the generation of #slip commands to mark misresults.
  2108.  
  2109.  `NoTitle` switches off the generation of titelling commands. Default is to
  2110.  issue #title, #gtitle and #unit. Note that you will get misassigned titles,
  2111.  if you change the column sequence or start by using when rereading the
  2112.  table.
  2113.  
  2114.  `Seps` sets the data separator character. Usually a space is used, but you
  2115.  may feel like specifying other seperators either to generate output for
  2116.  other programs or to get along with string type columns, which are by now
  2117.  not quoted. That will change in future. Note that backslash controls are
  2118.  supported.
  2119.  
  2120.  `TermScan` scans the terminals for their enviroment settings and issues a
  2121.  command sequence that sets those variables again when reread. Rereading
  2122.  won't however cancel variables that have not been scanned, but set later
  2123.  by your commandfile.
  2124.  
  2125. 3 gnuplot
  2126. ?gnuplot
  2127.  The primary data file holds the data to plot. The secondary file will have
  2128.  a sequence of GNUPLOT commands written to. All you will still have to do
  2129.  is to start GNUPLOT, type 'load "secondary file"' and you should see your
  2130.  graphics on screen.
  2131.  
  2132.  The `gnuplot` terminal writes no more than 4 data columns. The first column
  2133.  is expected to hold the x-data and the second the y-data. If three columns
  2134.  are given the third is interpreted as y-delta error and the errorbars style
  2135.  is automatically written to the commandfile.
  2136.  
  2137.  If 4 data columns are selected, you will need the inofficial GNUPLOT 3.1 that
  2138.  was patched by me. This one supports an errorsquares style meaning x and y
  2139.  errorbars. As this is an inofficial feature the terminal output will change
  2140.  as soon as an official GNUPLOT supports x errors. Anyhow, the third column
  2141.  holds the x errors and the fourth the y errors. The errorsquares style will
  2142.  of course be automatically selected.
  2143.  
  2144.  Void data is not plotted, but misresults are plotted plain without any
  2145.  further marks. Future versions may enable you to switch that off.
  2146.  
  2147.  If an `rtitle` is specified for the y-column and a regression had been done
  2148.  to it, the regression graph is printed as well. Logarithmic regressions (See
  2149.  `commands logreg`) are considered and printed correctly, so that you will
  2150.  expect an arced graph in a linear scaled diagram. This graph is titled with
  2151.  the `rtitle` string. All regressins are memorized!
  2152.  
  2153.  The `globtitle` is set to GNUPLOT's equivalent. The column titles (See
  2154.  `commands title`) are used to title the axes and their units are put in
  2155.  square brackets. Finally the y-columns `gtitle` is used to label the
  2156.  data plot.
  2157.  
  2158.  Preambles (see `commands preamble`) are made exactly the first line of the
  2159.  GNUPLOT commandfile. You may use them to custom scale the diagram, select
  2160.  an output file for GNUPLOT and its terminal for instance. You will also
  2161.  find it useful to tell GNUPLOT about scaling the axes e.g. by
  2162.  
  2163.          #preamble "set logscale x"
  2164.  
  2165.  Grouping is not supported. But you may merge columns (see `commands merge`)
  2166.  and get multiple y-data and even regressions printed to the same x-axis.
  2167.  Note that the terminal checks, if the x-axes of the various regressions are
  2168.  compatible.
  2169.  
  2170. 4 enviroment
  2171. ?variable
  2172. ?enviroment
  2173.  Well, there is quite a lot of them for this terminal. You should be able to
  2174.  produce any 2-D-plot you like. In the following I will use the Dollar symbol
  2175.  '$' to indicate the variable's contents. In any case consult your GNUPLOT
  2176.  manual. Here they are in detail:
  2177.  
  2178.  `Angles` issues a "set angles $" to the commandfile. This is needed to switch
  2179.  between radians and degrees in `polar` plots.
  2180.  
  2181.  `AddPlot` contents are added behind a seperating comma behind the `plot`
  2182.  command in the command file. This enables you to e.g. plot a theoretical
  2183.  curve into your experimental data.
  2184.  
  2185.  `Errorbars` forces a 4 column output to be handled with `errorbars` and not
  2186.  `errorsquares`. This should always be set by users, who do not work with my
  2187.  modified GNUPLOT, unless `errorsquares` becomes GNUPLOT standard in future.
  2188.  
  2189.  `FullRange` contents will be verbally inserted at the position of ranges in
  2190.  the GNUPlot command file. Note that you have to write the square brackets!
  2191.  
  2192.  `Key` issues a "set key $" to the commandfile. This is needed to place the
  2193.  graphics key in the plot, thus to get it out of interesting regions.
  2194.  
  2195.  `Logscale` issues "set nologscale" if it is left empty. In any other case
  2196.  it issues "set logscale $". You may want to use it with `logreg` plots.
  2197.  
  2198.  `Output` issues a 'set output "$"' to the commandfile. You should use it as
  2199.  soon you are sure the plot fits your needs. It saves a lot of typing.
  2200.  
  2201.  `Polar` issues a "set polar" if set. By default "set nopolar" is issued.
  2202.  
  2203.  `Range` issues a range after the `plot` command. The brackets are generated,
  2204.  so you will only set the pure range stuff. Example:
  2205.  
  2206.          #set range 1:8
  2207.  
  2208.  will issue:
  2209.  
  2210.          plot [1:8] ...
  2211.  
  2212.  to the GNUPLOT commandfile. As you see you can only set the x-range by now,
  2213.  but if you wish, I may add a more common enviroment variable.
  2214.  
  2215.  `Size` issues a "set size $" to the commandfile. You will usually use it
  2216.  together with `output` and `term`.
  2217.  
  2218.  `Style` adds another data file plot to the `plot` command in the commandfile,
  2219.  using the style given in the variable's contents. For Example:
  2220.  
  2221.          #set style csplines
  2222.          #ocol 1 2
  2223.          #write "data.dat" "data.gnu"
  2224.  
  2225.  would issue the following `plot` command to "data.gnu":
  2226.  
  2227.          plot "data.dat", "data.dat" with csplines
  2228.  
  2229.  Note that the `csplines` style -- data interpolation by cubic splines -- is
  2230.  also a feature that doesn't come with the standard GNUPLOT, at least not by
  2231.  now (GNUPLOT 3.2). But e.g. `lines` would be applicable with standard
  2232.  GNUPLOT.
  2233.  
  2234.  `term` issues a "set terminal $" to the commandfile. You will usually use that
  2235.  together with `output`.
  2236.  
  2237.  `tex` adapts the output for TeX style GNUPLOT terminals for a better TeX
  2238.  graph formatting. You should always set this, if you intend to use the
  2239.  GNUPLOT terminals 'latex', 'pictex', 'epic' or 'eepic'.
  2240.  
  2241.  `yrange` works just like `range` but produces a range entry that affects the
  2242.  y-range only. Note that `fullrange` overrides `yrange` which in tur overrides
  2243.  `range`.
  2244.  
  2245. 3 latex
  2246. ?latex
  2247.  The traditional terminal and meanwhile the most complex. At first a crude
  2248.  overview. The latex terminal produces a LaTeX tabular enviroment for output.
  2249.  This is written to the primary output file. The secondary output is ignored.
  2250.  The whole table is put into an \fbox{}. The `globtitle` is set as a
  2251.  \multicolumn{} stretching across the full table width. If it is missing, the
  2252.  field won't be generated. Then group titles are displayed (see `commands
  2253.  name`). If two or more columns of the same group are neighboured in their
  2254.  logical write numbers, no vertical seperators will be drawn between them and
  2255.  the group title will center in that \multicolumn{}.
  2256.  
  2257.  The table's head is concluded by the column `title` and `unit`, which are
  2258.  printed `title` over `unit` and each column separated by a vertical bar from
  2259.  each other. If no units at all are specified the unit line will be
  2260.  suppressed. The head is separated by a double horizontal bar from the table
  2261.  itself.
  2262.  
  2263.  Void entries are printed as '--' medium sized horizontal bars. Misresults
  2264.  are printed in italics. The numbers are formatted and rounded as to the
  2265.  precision selected in the `commandfile` (see `commands prec` and `commands
  2266.  digital`). All entries are centered. Columns and rows are seperated by
  2267.  vertical and horizontal bars.
  2268.  
  2269.  After the table has concluded, the terminal scans for regressions, averages
  2270.  and so on. If an averaging column or a regression's y-column is included in
  2271.  the logical write list, all averaging and regression done to each of those
  2272.  will be summarized and the results will be posted in new \tabular enviroments
  2273.  following the main table. Future Versions may have a feature to influence its
  2274.  style or switch it off.
  2275.  
  2276.  Regression results are printed as y-title regression type superscript and
  2277.  x-title. The superscript by now is German. The release Version will be
  2278.  freely configurable. Then the A and B values are printed with errors and
  2279.  units. The A unit is built by \frac{y-unit}{x-unit}. If the regressions were
  2280.  logarithmic, \log is set before the corresponding unit.
  2281.  
  2282.  Avaraging results are printed in a similar manner. Column title, superscript
  2283.  (German by now, will be freely configurable) in the first line. The next
  2284.  line holds \bar{x} the mean, its error and unit. The last line displys the
  2285.  standard deviation with unit after \sigma. The whole thing displays a \pm
  2286.  too much (after the standard deviation) by now, but I'll fix that until the
  2287.  release version.
  2288.  
  2289.  Finally results of 'far differences' made by `commands diff`. Just as
  2290.  averaging results, but as no standard deviation is computed there is no
  2291.  third line. The mean difference is named \bar{\triangle x}.
  2292.  
  2293. 4 enviroment
  2294. ?variable
  2295. ?enviroment
  2296.  The LaTeX terminal supports a whole lot of enviroment variables and is very
  2297.  freely configurable. Beyond that I am sure that there will still be need for
  2298.  further configuration variables.
  2299.  
  2300.  The variable `RegData`, `Mean`, `MeanID`, `Diff` and `DiffID` serve to adapt
  2301.  automessages to your native language. Other than in the old versions (1.120
  2302.  and below) the default values are now English. I recommend to write an
  2303.  `include` file for language adaption.
  2304.  
  2305.  Except for the preamble backslash controls seemed not to be necessary and
  2306.  thus are not supported by this terminal.
  2307.  
  2308.  Here are the enviroment variables in detail. As before I use the Dollar symbol
  2309.  '$' to indicate the variable contents.
  2310.  
  2311.  `aID` sets the identifier string that preceeds regression slopes. Defaults
  2312.  to "a".
  2313.  
  2314.  `bID` sets the identifier string that preceeds regression offsets. Defaults
  2315.  to "b".
  2316.  
  2317.  `Caption` produces a \caption line. You will probably use it together with
  2318.  `FloatHead`. The `globtitle` is used as caption and won't be issued anymore
  2319.  in the table itself, when `caption` is set. If `caption` holds contents they
  2320.  are used as the \label name. Example:
  2321.  
  2322.          #globtitle Tabelle
  2323.          #set caption mytab
  2324.  
  2325.  would produce an output like:
  2326.  
  2327.          \caption{\label{mytab} Tabelle}
  2328.  
  2329.  `Corr` enables the output of correlation ratios in regression data blocks.
  2330.  
  2331.  `CorrID` sets the identifier string that preceeds correlation ratios. Defaults
  2332.  to $r$.
  2333.  
  2334.  `Diff` sets the default name for "Differencing data", which is posted at the
  2335.  beginning of a block containing those data.
  2336.  
  2337.  `DiffID` sets a symbol for the differencing data, which is displayed directly
  2338.  in front of the numerical value. This string defaults to $\bar{\triangle{x}}$.
  2339.  
  2340.  `FloatHead` puts the whole table into a `table` and `center` enviroment as
  2341.  most of you will probably do anyway. Well, it saves typing.
  2342.  
  2343.  `Mean` sets the default name for "Averaging data", which is posted at the
  2344.  beginning of a block containing those data.
  2345.  
  2346.  `MeanID` sets a symbol for the averaging data, which is displayed directly
  2347.  in front of the numerical value. This string defaults to $\bar{x}$.
  2348.  
  2349.  `NoHead` inhibits the standard `tabular` header and titeling. Note that it
  2350.  does not influence `caption` or `floathead`.
  2351.  
  2352.  `NoReg` inhibits the regression data blocks which are printed following to
  2353.  the table itself.
  2354.  
  2355.  `RegData` sets the default name for "Regression data", which is posted at the
  2356.  beginning of a block containing those data.
  2357.  
  2358.  `Size` puts the table -- not the regression data blocks -- into a LaTeX
  2359.  enviroment, which receives the name of the variable's contents. You may use
  2360.  it for oversized (too wide) tables and select a smaller font for it. For
  2361.  Example:
  2362.  
  2363.          #set size scriptsize
  2364.  
  2365.  would result in the structure:
  2366.  
  2367.          optional FloatHead and Caption
  2368.  
  2369.          \begin{scriptsize}
  2370.  
  2371.          the table itself ...
  2372.  
  2373.          \end{scriptsize}
  2374.  
  2375.          regression data blocks ...
  2376.          optional FloatHead close
  2377.  
  2378.  `SuperTab` tells DataProc to use the supertabular enviroment. Note that you
  2379.  need the corresponding style file to use this enviroment. As supertabular
  2380.  can pagebreak in tables I recommend to use this option for long tables. Note
  2381.  also that I cannot place the table into an enclosing \fbox anymore and thus
  2382.  it looks a bit different, say more loosely, so for smaller tables you may
  2383.  prefer the normal tabular still. `SuperTab` inhibits `NoHead`, but that my
  2384.  change, if you request me to do it.
  2385.  
  2386. 3 plain
  2387. ?plain
  2388.  This terminal was designed for a 7 bit ASCII output e.g. to a printer. You
  2389.  may in some respects however select an extended charset and I'm working on
  2390.  improving that. Beyond that I plan to write a terminal supporting graphics
  2391.  facilities of printers.
  2392.  
  2393.  The output format is similar to the `LaTeX` terminal. Please refer to that
  2394.  section for detailed information about how the table and regression blocks
  2395.  look like. As TeX does, all scaling is done automatically.
  2396.  
  2397.  Note that other than the LaTeX terminal, plain supports backslash controls.
  2398.  Backslash controls may be specified for any single character definition and
  2399.  the `slip` style initer string. Of course like all the other terminals plain
  2400.  supports those controls in its preamble.
  2401.  
  2402. 4 enviroment
  2403. ?variable
  2404. ?enviroment
  2405.  The enviroment variables differ a little from the `LaTeX` terminal and beyond
  2406.  that there are many more of them to customize your output. Indeed I would
  2407.  recommend an `include` file for your favorit settings. It may be a good idea
  2408.  to select your screen as output file for table previewing and thus have an
  2409.  `include` for your terminal as well. Now the enviroments in detail:
  2410.  
  2411.  `aID` sets the string preceeding regression slopes in the regression data
  2412.  summaries
  2413.  
  2414.  `bID` sets the string preceeding regression offsets in the regression data
  2415.  summaries
  2416.  
  2417.  `Corr` enables output of the correlation ratio in the regression summaries.
  2418.  
  2419.  `CorrID` sets the string to preceed correlation ratios. Defaults to r.
  2420.  
  2421.  `Cross` the first character of the contents defines the character to use for
  2422.  a single horizontal bar crossing a single vertical. Defaults to '+'. On
  2423.  MS-DOS systems you may try: #set cross \d197
  2424.  
  2425.  `Custom` allows you to custom scale the column widths of the table. The
  2426.  variable string is parsed for `tokens`. Each of those tokens is parsed
  2427.  for "number$width". This will set the fixed "width" to the table's
  2428.  "number" column. Note that `spacing` is added left and right to the
  2429.  column width, as well as one character for a vertical bar.
  2430.  
  2431.  `Deviation` sets the string to issue in the regression blocks in front of
  2432.  the standard deviation result, which is by now only supported by blocks
  2433.  generated by `average`. Defaults to "Deviation".
  2434.  
  2435.  `Diff` sets the string to issue in the regression blocks for titelling
  2436.  data created by `diff`. Defaults to "Difference avaraging data".
  2437.  
  2438.  `DiffID` sets the string to issue in front of the `diff` result. Defaults
  2439.  to "Mean difference".
  2440.  
  2441.  `Feed` sets the number of blank lines in front of the table. Defaults to
  2442.  zero.
  2443.  
  2444.  `HdCross` sets the character used for a single vertical bar crossing a
  2445.  double horizontal. Defaults to '|'. On MS-DOS systems you may try:
  2446.  #set hdcross \d216.
  2447.  
  2448.  `HdLine` sets the character to use for a double horizontal bar. Defaults
  2449.  to '='. On MS-DOS systems you may try: #set hdline \d205
  2450.  
  2451.  `HLine` sets the character to use for a single horizontal bar. Defaults
  2452.  to '-'. On MS-DOS systems you may try: #set hline \d196
  2453.  
  2454.  `InterFeed` issues a formfeed between the table and the regression block
  2455.  if set.
  2456.  
  2457.  `Margin` sets the number of spaces left of the table and regression blocks.
  2458.  Defaults to zero.
  2459.  
  2460.  `Mean` sets the string to issue in the regression blocks for titelling
  2461.  data created by `average`. Defaults to "Avaraging data".
  2462.  
  2463.  `MeanID` sets the string to issue in front of the `average` result. Defaults
  2464.  to "Mean".
  2465.  
  2466.  `NoReg` suppresses the output of regression blocks if set.
  2467.  
  2468.  `NoTable` suppresses the output of the table if set.
  2469.  
  2470.  `RegData` sets the string to issue in the regression blocks for titelling
  2471.  data created by `lreg` and `logreg`. Defaults to "Regression data".
  2472.  
  2473.  `Slip` allows to define a control sequece to mark misresults. The variable
  2474.  string is parsed as two `tokens`. The first one switches the slip style on,
  2475.  the second off. The string is parsed as a C-type printf() format string.
  2476.  Thus you may use e.g. "\x08" to define the ASCII control character number 8.
  2477.  As you probably know "\x" introduces a hex number, the backslash alone an
  2478.  octal number. You must write "\\" for the backslash itself and "\%" for a
  2479.  %-sign. Each of both control strings may not exceed 29 characters. The
  2480.  default is nothing.
  2481.  
  2482.  `Small` tells the terminal to omit the single horizontal bars. This lets the
  2483.  table appear more compact and reduces it to half its length. Try it out.
  2484.  
  2485.  `Spacing` sets the number of spaces to place left and right of a table entry.
  2486.  Defaults to one.
  2487.  
  2488.  `VLine` sets the character to use for a single vertical bar. Defaults to '|'.
  2489.  On MS-DOS systems #set vline \d179 is preferable.
  2490.  
  2491. 2 errors
  2492. ?error
  2493.  Well, I'm not very pleased with the error handling of neither DataProc itself
  2494.  nor the math processor. The messages of latter are well defined and need no
  2495.  further explanation, but the position marked, where the error should have
  2496.  occured, is almost arbitrary. I will think of a better error handler when I
  2497.  rewrite the math module.
  2498.  
  2499.  The error messages of DataProc itself are typical for compilers. They are not
  2500.  too definite and are usually caused by faults lines ahead. I will try to get
  2501.  the whole stuff a little more transparent in future versions. At least I will
  2502.  cite the errorline and command.
  2503.  
  2504.  But here are the massages and what they mean:
  2505.  
  2506.    Never mind -- it's a joke: well, ignore it and give me a note, if that
  2507.                               occures. The problem is a software bug.
  2508.  
  2509.    Invalid column:            the column number given is out of range. In
  2510.                               most cases you will have forgotten to define
  2511.                               the column (see `commands columns`)
  2512.  
  2513.    Unknown command:           tells you that the `command` is unknown. You
  2514.                               will supposedly have mispelled it.
  2515.  
  2516.    Invalid function:          the function number given was never defined
  2517.  
  2518.    $ -> File "$" does not
  2519.    open:                      the named file cannot be opened, because of the
  2520.                               numbered operating system error.
  2521.  
  2522.    Invalid terminal:          the named terminal is not found in the terminal
  2523.                               list. You will probably have mispelled it.
  2524.  
  2525.    Low memory space:          well, buy some RAM to cope with that.
  2526.  
  2527.    Invalid mathematical
  2528.    expression:                should be followed by the message produced by
  2529.                               the math processor. See my words above of how
  2530.                               I think about those.
  2531.  
  2532.    Invalid format descriptor: e.g. in `columns` you specified a column format
  2533.                               other than %d, %f, %lf, %s
  2534.  
  2535.    No data for regression:    In most cases that will mean that the y-column
  2536.                               or the wheigt columns are invalid. If they are
  2537.                               O.K. check your memory and if that isn't low
  2538.                               report it to me, because that may be a bug.
  2539.                               This of course applies to `average` and `diff`
  2540.                               as well.
  2541.  
  2542.    Invalid group:             the group number given was never defined. Define
  2543.                               the group or correct the number.
  2544.  
  2545.    This should not appear:    well, it's exactly that. There is certainly a
  2546.                               software bug.
  2547.  
  2548.    Did not expect data here:  should never appear. If so, give me a note.
  2549.  
  2550.    Cannot add number tag:     a global constant cannot be set, because either
  2551.                               the variable already exists or there is no memory
  2552.                               available to store it.
  2553.  
  2554.    Unknown number tag:        a number was represented by an unknown global
  2555.                               constant
  2556.  
  2557.    Global constant expected:  in a #define statement (or similar) an obligatory
  2558.                               name of a global variable is missing
  2559.  
  2560.    Terminal enviroment
  2561.    variable expected:         in a #set or #unset command the variable key is
  2562.                               missing
  2563.  
  2564.    Terminal enviroment
  2565.    variable not parseable:    you will have mispelled backslash controls in an
  2566.                               enviroment or preamble. Not that the error is
  2567.                               issued by the terminal and thus won't appear
  2568.                               when the definition was made.
  2569.  
  2570.    Table size exceeded,
  2571.    enlarge #dsize:            should no longer appear
  2572.  
  2573.    Column already exists:     The column you want to add with #addcol is already
  2574.                               part of the table
  2575.  
  2576.    Global string $ is not
  2577.    parsable:                  The named global string cannot be evaluated. Check
  2578.                               your backslash syntax
  2579.  
  2580.    The string $ is too long:  A given string is longer than the field it should
  2581.                               be written to.
  2582.  
  2583.    DOS command "$" failed:    The command you passed to #dos caused an error
  2584.                               during execution
  2585.  
  2586.    No more #IF opened:        You called #else or #endif, but you did not
  2587.                               specify a corresponding #if.
  2588.  
  2589.    #IF at line $ is not
  2590.    closed:                    You exit a commandfile with an #IF command that
  2591.                               was not terminated by #ENDIF
  2592.  
  2593.    Identifier expected:       The command assigns a value to some symbolic
  2594.                               constant, but its name is missing.
  2595.  
  2596.    Obligeous argument
  2597.    missing:                   An argument that must be supplied is missing. Only
  2598.                               very few functions generate this error. By now it
  2599.                               is only #meanof and #wmeanof
  2600.  
  2601.    $ writing file "$":        the numbered operation system error occured during
  2602.                               output to the named file.
  2603.  
  2604.    $ clearing file "$":       the numbered operation system error occured when
  2605.                               flushing the buffers of the named file.
  2606.  
  2607.    $ closing file "$":        the numbered operation system error occured when
  2608.                               closing the named file.
  2609.  
  2610.    $ working on file "$":     the numbered operation system error occured during
  2611.                               non-I/O operations in the named file.
  2612.  
  2613. 2 History
  2614. ? history
  2615.  Some words on history. The internals of DataProc have been severly tested
  2616.  during my physics practice and should work fine, but without any kind of
  2617.  user friendliness. That were the revisions 1.0 to approximately 1.100. The
  2618.  rest was spent on more abstract commandfiles and more flexible terminals
  2619.  resulting in such as global variables, terminal enviroments and the removal
  2620.  of case sensitivity. Performance has increased a little as well, although
  2621.  I did not really optimize anything by now. The first version fulfilling
  2622.  (hopefully!) this manual is 1.144. As the manual developed from 1.120 there
  2623.  might still be some ancient remarks in it. Ignore them, if you find more
  2624.  comfortable remarks somewhere else in this manual.
  2625.  
  2626.  I added the `areg` command in revision 1.145, but as I already feared, the
  2627.  math processor is much too instable and too slow for it. I tried to fit the
  2628.  results of a slit experiment to a sinc-function. Using the same data in a
  2629.  hardcoded program with the same subroutine worked fine, but the results of
  2630.  DataProc are unusable and seem to be slightly divergent. So be very careful
  2631.  using the `areg` command. This will -- has to -- improve with the new maths
  2632.  processor.
  2633.  
  2634.  SAS/C (tm) V6.0 arrived and I recompiled the old stuff. According to new
  2635.  compiler warnings I found some errors in the code. Also I removed some bugs
  2636.  in the `plain` terminal and made the `GNUPLOT` terminal useable without
  2637.  TeX. I fitted the code for compilation on an IBM PC, detecting another set
  2638.  of buggy code sequences. Finally I ran the standard Amiga test, meaning
  2639.  MungWall and Enforcer and removed DataProc's Enforcer hits. Revision 1.153
  2640.  is the product of all those internal bugfixes. DataProc became about 7 kB
  2641.  longer but considerably faster.
  2642.  
  2643.  Well, the first release should be DataProc 2.0, but I lacked of testers and
  2644.  as it all works fine so far, I don't think it to be a big fault to release
  2645.  Version 1.153 already.
  2646.  
  2647.  Version 1.154 fixed the end vbar of the unit title line of the `plain` terminal.
  2648.  
  2649.  Version 1.156 is almost the same code -- apart from a fix of the sgn() function,
  2650.  but as I gained confidence in the code I set the optimize flags for the compiler
  2651.  and DataProc shrinked about 12 kB and increased a great deal in speed.
  2652.  
  2653.  Version 1.157 now supplies the `AddPlot` enviroment variable in the `GNUPLOT`
  2654.  terminal to add theoretical functions to experimental data.
  2655.  
  2656.  Version 1.162 supplies the `global string` feature and a slightly enhanced
  2657.  error report feature. The latter will be one of the major concerns in future.
  2658.  
  2659.  Version 1.167 fixes the boundary bug. Previous versions needed the upper
  2660.  boundary to be set one higher than told in this manual, namely the first
  2661.  excluded row. This bug is now fixed.
  2662.  
  2663.  Version 1.169 introduces the enviroment variable `small` in the `plain`
  2664.  terminal and fixes a disgusting bug in the `digital` type formatting of
  2665.  output. It still does not work how it should, but it at least should not
  2666.  produce wrong results anymore. As soon as I'll find some time I'll rewrite
  2667.  that routine to ultimately fix that problem.
  2668.  
  2669.  Version 1.174 is the promised `digital` fix. The new code might be slightly
  2670.  slower, because it now uses floating point maths, but it has a crucial
  2671.  difference. It has a chance to work and the first tests seemed very
  2672.  positive. Beyond that the new modules have been compiled with SAS/C 6.1
  2673.  resulting in even more effective code.
  2674.  
  2675.  Version 1.177 is the answer to the reported rounding problems. Why hadn't
  2676.  such severe problems been reported before? The trimming routines are now
  2677.  completely rewritten and should be stable by now. Anyhow, there might still
  2678.  be special cases that I didn't consider, so check the new routines carefully.
  2679.  The behaviour has changed a little. Selecting a precision of 4 cyphers will
  2680.  always result in a display of 4 significant cyphers, even if the last ones
  2681.  are zeroes! Rounding should do fine now.
  2682.  
  2683.  Version 1.178 adds the `runit` command and some smaller enhancements in
  2684.  configurability.
  2685.  
  2686.  Version 1.182 supports the LaTeX `supertabular` enviroment for LaTeX style
  2687.  tables.
  2688.  
  2689.  Version 1.187 now computes correlation ratios for linear and logarithmic
  2690.  regressions, can monitor them to stdout, set them to math variables and
  2691.  of course output them to the relevant terminals. Finally I found an Amiga
  2692.  specific bug in the stdout management. Here's to you, Tim, now your stdout
  2693.  will be sorted, finally!
  2694.  
  2695.  Version 1.189 is the answer to a set of guys using this software extensively
  2696.  but don't even think of paying for it. Well, this version is equipped with
  2697.  a keyfile. It runs perfectly without a keyfile, if you got strong nerves,
  2698.  but a valid keyfile will switch off those nasty intermezzos!? Well, see and
  2699.  enjoy!
  2700.  
  2701.  Version 1.202 is nothing but the (almost) perfection of the shareware
  2702.  reminders. You will notice, what it is, while using it. Never mind, pay!
  2703.  
  2704.  Just coming back from porting DataProc to MS-DOS. Finally it seems to run
  2705.  fine as I thought of carrying my test files with me. I fixed a possible
  2706.  bug in the maths processor that the compiler complained about. The handling
  2707.  of the Keyfile changed a bit, because fseek() doesn't seem to work how it
  2708.  should. In the end the MS-DOS users are the lucky guys, cause the most
  2709.  nasty shareware reminder during the execution does not work. Don't be too
  2710.  happy, but sure that I'll fix that. Version 1.203 is nothing but the
  2711.  recompiled port sources.
  2712.  
  2713.  Version 1.205 no longer requires the number token in the `columns` command.
  2714.  Beyond that a bug in `columns` had been fixed allowing you to omit the
  2715.  `using` command from your scripts. By default `DataProc` will read all
  2716.  columns in the given sequence now.
  2717.  
  2718.  Version 1.213 now allows to read several columns later. See the command
  2719.  `row` that has been added. Beyond that `quit` and `execute` are new and
  2720.  prepare an interactive mode. Finally a bug in the plain terminal has been
  2721.  fixed. Well, I had some severe crashes, but I couldn't track them down to
  2722.  DataProc. Two hours of constant testing with Enforcer and MungWall didn't
  2723.  produce any hit ... so I tend to blame it on some other task. Anyhow, if
  2724.  you encounter crashes, report them immediately and tell me what other tasks
  2725.  are running, libraries installed, etc.
  2726.  
  2727.  Version 1.214 is the product of two sleepless nights of debugging and
  2728.  the `internal` version now owns a 40kB sized cross debugger. I will now
  2729.  go to sleep telling you ... there ain't no more crashes! Ahh, before I
  2730.  forget to mention it, there had been a display format bug with void data
  2731.  in the plain terminal, this had been fixed during the last two nights as
  2732.  well.
  2733.  
  2734.  Version 1.221 has the interactive mode added. See documentation for
  2735.  special information.
  2736.  
  2737.  Version 1.225 is a bugfix compendium. First a bug I most likely have
  2738.  implemented myself in 1.213 that prohibited DataProc from making columns,
  2739.  which have already been generated by #make, is fixed. Then a typo in the
  2740.  GnuPlot terminal was also fixed. And finally an annoying and heavy bug
  2741.  in logscaled regression is removed. Note that any results you got from
  2742.  logarithmic actions like #logreg used the natural logarithm and NOT the
  2743.  decadic as mentioned in the manual. By now this is fixed. Finally weighted
  2744.  logarithmic actions had been pure nonsense, this is fixed as well.
  2745.  
  2746.  Version 1.227 fixed another typo in the GnuPlot terminal. Logarithmic plots
  2747.  should now be perfect.
  2748.  
  2749.  Version 1.228 fixed the `polar` enviroment in the gnuplot terminal. It now
  2750.  works as it should.
  2751.  
  2752.  Version 1.233 is another contribution to user friendliness. First you may
  2753.  specify undefined global variables as function numbers in the `func` command
  2754.  which will then automatically initialized, second the `dsize` command is
  2755.  far less critical than before. See the commands' section for details.
  2756.  
  2757.  Version 1.234 added the `addcol` and `remcol` commands. For all practical
  2758.  purposes they are obsolete, but you may think them as a contribution to
  2759.  the beauty of commandfiles. As I lack of time I had no time to test the
  2760.  routines, but for all thats logic `addcol` has to run and `remcol` at least
  2761.  should do.
  2762.  
  2763.  Version 1.235 is the recompile of the 1.234 MS-DOS port on the Amiga machine.
  2764.  The sources are now assured to be identical.
  2765.  
  2766.  Version 1.236 is the product of half an hour using the program myself. For
  2767.  what do I have testers, if they don't even notice severe uncomfortabilities?
  2768.  The GnuPlot terminal now supports a `yrange` enviroment. The LaTeX terminal's
  2769.  regression slope and offset identifiers are now configurable. Titles may now
  2770.  be fed with global strings. Finally you may now open a logfile to store
  2771.  additional information you may need while while writing down your results.
  2772.  
  2773.  Version 1.238 fixes a handful of bugs I found in the same half hour. As
  2774.  nobody complained, I assume nobody uses the features added since 1.100.
  2775.  
  2776.  Version 1.239 adds the precision feature to the `build` command's float
  2777.  conversion.
  2778.  
  2779.  Version 1.241 fixes a bug that came in with the titles taking global strings
  2780.  and an old bug in `mark`. `mark` now really works as described in this manual,
  2781.  but it returned a one too small number in older versions.
  2782.  
  2783.  Version 1.246 adds the tagfile support and the `dos` command.
  2784.  
  2785.  Version 1.247 adds the `if` clause and a lot of interactive stuff. See `ask`,
  2786.  `else`, `endif`, `if`, `readvar` and `stop` for more information. Tagfile
  2787.  support was enhanced by `tagdata`.
  2788.  
  2789.  Version 1.249 adds the enhanced batch support commands `storeset`, `flushset`
  2790.  and `flushvar`. The online statisic commands `meanof` and `wmeanof` and
  2791.  finally the plain terminal, too, supports the `aID` and `bID` enviroments.
  2792.  
  2793.  Version 1.254 has a lot of the keyfile and shareware reminder stuff with
  2794.  a completely new concept rewritten. I hope it now works on MS-DOS machines.
  2795.  Note that unregistered MS-DOS versions crashed on some systems.
  2796.  
  2797.  Version 1.258 adds the `storekill`, `closetag` and `closelog` commands. It
  2798.  also fixes some bugs in the terminal enviroment variable storing code. Now
  2799.  `input` may be used as a synonym for `include`, because me and some other
  2800.  TeX freaks messed them up constantly. Finally the error handlig using
  2801.  include files returned the location of the uppermost `include` command. This
  2802.  is fixed by now and the correct location will be displayed.
  2803.  
  2804.  Version 1.260 now monitors all file I/O errors and traps them. So on Amiga
  2805.  systems you should have to press nasty requesters only one time. Originally
  2806.  I wanted to find a bug by tracking I/O activity, but the bug is still in
  2807.  there. During the installation of the control routines I optimized file I/O
  2808.  a little. It seems to me that output got faster even though anything is
  2809.  checked by now. Beyond that two new commands are installed. See `batch` and
  2810.  `nop` for documentation. See also the chapter `errors`, because a whole lot
  2811.  has changed there.
  2812.  
  2813.  Version 1.263 is the result of 10 hours of bug hunt and I finally caught it,
  2814.  it came in with `flushset` and caused weired error messages.
  2815.  
  2816.  Version 1.264 is the recompile of the MS-DOS port. Some smaller bugs in
  2817.  the I/O error handling had been resolved. Beyond that the MS-DOS file
  2818.  I/O has been completely revised. At least with MS-DOS Version 6 everything
  2819.  works all right -- yes the keyfile stuff as well!
  2820.  
  2821.  Report errors, suggestions and registrations to:
  2822.  
  2823.    MGR, Asgard
  2824.    Lars Hanke
  2825.    Schlachthofstr. 67
  2826.    4690 Herne 2
  2827.    Federal republic Germany
  2828.  
  2829.    FIDO: Lars Hanke 2:245/5802.22
  2830.    UUCP: mgr@asgard.bo.open.de
  2831.  
  2832.  Good luck with this program and happy computing!
  2833.  
  2834.  
  2835.